2008-11-20 10 views
8

J'essaye d'éviter le code comme ceci en réutilisant le même ViewUserControl dans ASP.NET MVC. Aucune suggestion?Comment réutiliser proprement éditer/nouvelles vues dans Asp.NET MVC

<% if (ViewContext.ViewData["editMode"].ToString() == "edit"){ %> 
    <%= Html.SubmitButton("submit", "Update Brand")%><span class="or">Or</span><a href="#" class="cancel">Cancel</a> 
<% } else { %> 
    <%= Html.SubmitButton("submit", "Create New Brand")%><span class="or">Or</span><a href="#" class="cancel">Cancel</a> 
<%} %> 

Et ...

<% if (ViewContext.ViewData["editMode"].ToString() == "edit"){ %> 
    <h1 class="edit">Edit Brand Details</h1> 
<% } else { %> 
    <h1 class="create">Create A New Brand</h1> 
<%} %> 

Répondre

12

J'ai toujours créé des vues distinctes pour les nouvelles et Modifier sinon il se sent comme ma logique d'application commence à se glisser dans mon point de vue. De même, j'ai différentes actions de contrôleur pour créer et mettre à jour. Peut-être une meilleure façon d'aborder cela serait de prendre les bits que partagent les deux vues et de les déplacer vers un contrôle utilisateur et de faire un RenderPartial. De cette façon, vous pouvez avoir des vues propres avec un seul mode mais seulement écrire les parties communes une fois.

+0

c'est ce que je fais, mais je dois encore régler le texte sur le bouton Envoyer. –

+0

Cant vous mettre le texte pour le bouton soumettre dans votre viewdata à travers le contrôleur? – Morph

+1

Cela fuit la vue dans le contrôleur n'est ce pas? –

2
<% string submitLabel = (ViewData["editMode"].ToString() == "edit") ? "Update Brand" : "Create New Brand" %> 
<%= Html.SubmitButton("submit", submitLabel)%><span class="or">Or</span><a href="#" class="cancel">Cancel</a> 

Si vous avez plusieurs libellés comme celui-ci, vous pouvez les définir en haut de la page.

<% 
    string submitLabel = (ViewData["editMode"].ToString() == "edit") ? "Update Brand" : "Create New Brand"; 
    string h1Class = (ViewData["editMode"].ToString() == "edit") ? "edit" : "create"; 
    string h1Label = (ViewData["editMode"].ToString() == "edit") ? "Edit Brand Details" : "Create a New Brand"; 
%> 


<h1 class="<%= h1Class %>"><%= h1Label %></h1> 
9

Créer un (ou plusieurs) des vues partielles pour votre entité (par exemple en utilisant l'entité de contact) - IdChange.ascx (qui montre Id et modifier les informations) - PersonalInfo.ascx - Address.ascx

IdChange.ascx ne sera nécessaire que dans les vues d'édition

Créez deux vues distinctes pour l'édition et la création, puis utilisez RenderPartial pour importer les données de votre modèle dans la vue. Create.aspx

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 
<%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %> 
<% using (Html.BeginForm()) 
    { %> 
<fieldset> 
    <legend>Create a new contact</legend> 
    <div id="pagecontent"> 
     <div id="left"> 
     </div> 
     <div id="center"> 
      <% Html.RenderPartial("PersonalInfo", Model); %> 
     </div> 
    </div> 

    <p> 
     <input type="submit" value="Create" /> 

Edit.aspx

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 
<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %> 
<% using (Html.BeginForm()) 
    { %> 
<fieldset> 
    <legend>Edit existing contact</legend> 
    <div id="pagecontent"> 
     <div id="left"> 
      <% Html.RenderPartial("IdChange", Model); %> 
     </div> 
     <div id="center"> 
      <% Html.RenderPartial("PersonalInfo", Model); %> 
     </div> 
    </div> 

    <p> 
     <input type="submit" value="Edit" /> 
Questions connexes