37 votos

ASP.NET MVC - utilizando el mismo formulario para crear y editar

¿Cuál es el enfoque de mejores prácticas para la creación de un formulario que se utiliza para crear nuevos modelos para editar modelos existentes?

Hay tutoriales que la gente pueda me apunte en la dirección?

35voto

Protron Puntos 3889

NerdDinner será realmente muestran el camino.

Crear.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<NerdDinner.Models.Dinner>" MasterPageFile="~/Views/Shared/Site.Master"  %>
<asp:Content ID="Title" ContentPlaceHolderID="TitleContent" runat="server">
    Host a Nerd Dinner
</asp:Content>
<asp:Content ID="Create" ContentPlaceHolderID="MainContent" runat="server">
    <h2>Host a Dinner</h2>
    <% Html.RenderPartial("DinnerForm"); %>
</asp:Content>

Edit.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<NerdDinner.Models.Dinner>"
    MasterPageFile="~/Views/Shared/Site.Master" %>
<asp:Content ID="Title" ContentPlaceHolderID="TitleContent" runat="server">
    Edit: <%:Model.Title %>
</asp:Content>
<asp:Content ID="Edit" ContentPlaceHolderID="MainContent" runat="server">
    <h2>Edit Dinner</h2>
    <% Html.RenderPartial("DinnerForm"); %>
</asp:Content>

DinnerForm.ascx

<%@ Language="C#" Inherits="System.Web.Mvc.ViewUserControl<NerdDinner.Models.Dinner>" %>
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
<% Html.EnableClientValidation(); %>
<%: Html.ValidationSummary("Please correct the errors and try again.") %>
   <% using (Html.BeginForm())
      { %>
   <fieldset>
       <div id="dinnerDiv">
           <%:Html.EditorForModel() %>
           <p>
               <input type="submit" value="Save" />
           </p>
       </div>
       <div id="mapDiv">
           <%: Html.EditorFor(m => m.Location) %>
       </div>
   </fieldset>
   <% } %>

Tome en cuenta que este formulario es de uso Html.EditorForModel(), que es un método innovador para la generación de todos los campos a la vez, y usted tiene que estudiar sus desventajas antes de usarlo. Pero usted puede tomar fácilmente el resto de ejemplo para separar su forma común de la creación y edición de vistas.

Por último, se puede ver el código de controlador de aquí si usted está interesado.

12voto

E Rolnicki Puntos 968

Scott Gu mostrará el camino

9voto

Craig Stuntz Puntos 95965

No utilizar el mismo controlador de acción. Nuevo = HTTP PUT; edit = HTTP POST, así que dos cosas diferentes. Ambas acciones pueden y deben estar en el mismo controlador, sin embargo.

Me gusta la idea de usar un control de usuario para las características comunes (por ejemplo, los editores), y la conclusión que en la acción específica de las vistas de cosas que sólo debería aparecer de nuevo o editar, pero no tanto.

1voto

Perpetualcoder Puntos 7381

Podría ser (debe ser de la OMI) un controlador pero diferentes acciones del controlador. También asegúrese de tener suficiente HTTP verbos asociados con la acción apropiada. Siga el tutorial publicado por E Rolnicki y usted estará en su camino!

Feliz Codificación!!

0voto

Keith Williams Puntos 1126

Puedo poner el formulario en un control de usuario - es decir, Views/Shared/WidgetForm.ascx. Puse todos los campos de formulario en este control de usuario, pero NO la forma de las etiquetas en sí.

Las vistas, Vistas decir/Widgets/Nuevo.aspx y Vistas/Widgets/Editar.aspx, tienen la forma de las etiquetas en ellos y a todos los "alrededores" - instrucciones para llenar el formulario, el título de la página, etc, etc. A continuación, se incluyen el control de usuario dentro de la forma de las etiquetas.

El control de usuario, simplemente toma un objeto Widget, y muestra un formulario basado en los resultados. Poner sensibles valores en las nuevas opciones de Widget, por tanto, se convierte en importante, pero lo haces de todos modos, ¿verdad? ;)

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X