2008-11-20 14 views
8

Próbuję uniknąć takiego kodu podczas ponownego użycia tego samego narzędzia ViewUserControl w ASP.NET MVC. Jakieś sugestie?Jak wyczyścić ponownie edycję/nowe widoki w 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> 
<%} %> 

I ...

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

Odpowiedz

12

Zawsze tworzone oddzielne widoki dla nowych i edycji inaczej czuje się jak mój logiki aplikacji zaczyna wkradać się do mojego widoku. Podobnie mam różne akcje kontrolerów do tworzenia i aktualizacji. Być może lepszym sposobem, aby się do tego podejść, jest pobranie bitów, które dzielą te dwa widoki, i przeniesienie ich do kontroli użytkownika i wykonanie RenderPartial. W ten sposób możesz mieć czyste widoki w trybie pojedynczym, ale tylko jednokrotnie zapisuj części wspólne.

+0

że to, co robię, ale mam jeszcze ustawić tekst na przycisk Wyślij. –

+0

Czy umieścisz tekst przycisku przesyłania w danych widoku przez kontroler? – Morph

+1

To przecieka do kontrolera, prawda? –

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> 

Jeśli masz wiele takich etykiet, możesz je zdefiniować u góry strony.

<% 
    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

Tworzenie jeden (lub więcej) z częściowym widokiem na swojej jednostki (przykład za pomocą jednostki kontaktowej) - IdChange.ascx (co pokazuje identyfikator i zmienić informacje) - PersonalInfo.ascx - Address.ascx

IdChange.ascx będzie potrzebny tylko w widokach edycji

Utwórz dwa osobne widoki do edycji i utwórz, a następnie użyj RenderPartial, aby przenieść dane modelu do widoku. 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" /> 
Powiązane problemy