2009-11-24 3 views
0

Toutes les recherches que j'ai trouvées parlent de asp.net régulier où il y a un code derrière la page ou vous accédez à un contrôle asp.net de quelque sorte.Comment injecter du texte brut dans une page maître asp.net MVC1 à partir d'un enfant?

Puisqu'il n'y a pas de code derrière dans la page maître pour Asp.net MVC, comment est-ce que je mettrais un sous-titre en texte brut/html juste sous le titre de la page maître?

<div id="header"> 

     <div id="menu"> 

      <ul id="main">    
       <li class="current_page_item" id="menu"><%= Html.ActionLink("Home", "Index", "Home")%></li> 
       <%-- <li><%= Html.ActionLink("About", "About", "Home")%></li>--%> 
      </ul> 

     </div> 
     <div id="logo"> 
      <h1><span>Defect Severity Assessment Tool</span></h1> 
      <p id="subpage"><%--*What goes here?*--%></p> 
     </div> 
    </div> 

    <div id="content"> 
     <asp:ContentPlaceHolder ID="MainContent" runat="server" /> 

     <div id="footer"> 
     </div> 
    </div> 

Répondre

3

Utilisez un espace réservé de contenu.

Maître page

<div id="header"> 

     <div id="menu"> 

      <ul id="main">    
       <li class="current_page_item" id="menu"><%= Html.ActionLink("Home", "Index", "Home")%></li> 
       <%-- <li><%= Html.ActionLink("About", "About", "Home")%></li>--%> 
      </ul> 

     </div> 
     <div id="logo"> 
      <h1><span>Defect Severity Assessment Tool</span></h1> 
      <p id="subpage"><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></p> 
     </div> 
    </div> 

    <div id="content"> 
     <asp:ContentPlaceHolder ID="MainContent" runat="server" /> 

     <div id="footer"> 
     </div> 
    </div> 

Sommaire Page

<asp:Content ID="Title" ContentPlaceHolderID="TitleContent" runat="server"> 
    <!-- Your markup here --> 
</asp:Content> 
+0

C'est la méthode que j'ai tendance à utiliser dans cette situation aussi, je pense que le recours à ViewData ou aux vues partielles peut être exagéré pour quelque chose d'aussi simple que cela. Une approche similaire est adoptée pour la balise title dans le modèle par défaut MVC. –

+0

Savez-vous pourquoi si un contentPlaceholder est placé dans le même '

' avec un texte normal, le texte normal est-il supprimé? – Maslow

+0

@Maslow: Non, avez-vous essayé de placer le texte dans un élément span à la place? –

-1

vous pouvez essayer Html.RenderPartial et de rendre un contrôle ascx partiel

+0

Est-ce efficace pour 2 mots de texte? – Maslow

+0

En un mot? NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNO – surdipkrishna

1

Vous pouvez mettre la logique qui définit le nom de sous-page dans une base, classe de contrôleur abstraite que vos classes de contrôleur concrètes découlent. Remplacer OnActionExecuting dans votre contrôleur de base et ajouter du code qui ressemble à ceci:

protected override void OnActionExecuting(ActionExecutingContext context) { 
    ViewData["subpage"] = <add code to set subpage>; 
    base.OnActionExecuting(context); 
} 

À votre avis, vous pouvez référencer le nom des sous-pages comme ceci:

<div id="logo"> 
    <h1><span>Defect Severity Assessment Tool</span></h1> 
    <p id="subpage"><% =ViewData["subpage"] %></p> 
</div> 

Si vous devez définir la valeur de sous-page spécifiquement par contrôleur, remplacez simplement OnActionExecuting dans votre contrôleur concret et définissez la valeur ViewData à la place.

EDIT:

Si la valeur de sous-page est toujours en fonction du contrôleur actuellement chargé de la demande, vous pouvez être mieux définir une méthode abstraite pour définir sa valeur dans le contrôleur de base, puis remplaçant dans chaque contrôleur de béton. Par exemple:

public abstract class BaseController : Controller 
{ 
    protected abstract void SetSubPage(); 
} 

public class ConcreteController : BaseController 
{ 
    protected override void SetSubPage() 
    { 
     ViewData["subpage"] = <code goes here>; 
    } 
} 
+0

Ensuite, dans chaque contrôleur qui appelle cette vue, je dois définir cette variable? – Maslow

+0

@Maslow: Si la valeur de la sous-page varie en fonction du contrôleur qui gère la requête, alors oui. Sinon, vous pouvez définir la valeur dans le contrôleur de base. – pmarflee

0

Comme il n'y a pas de code derrière dans la page principale pour Asp.net MVC

Mais vous pouvez en ajouter un.

comment pourrais-je mettre un nom sous la page dans texte brut/html juste sous le titre de la page principale ?

<p id="subpage"><%--*What goes here?*--%></p> 

Qu'en est-ce MasterPage:

<p id="subpage"><%= Page.Title %></p> 

Et votre page serait:

<%@ Page Title="Name of Subpage" Language="C#" MasterPageFile="~/Templates/Main.Master" Inherits="System.Web.Mvc.ViewPage" %> 

Donc, nous utilisons juste titre de la page pour rendre son nom sur la page.