46 votes

ASP.NET MVC - à l'aide de la même forme à la fois de créer et de modifier des

Quel est l'approche des meilleures pratiques pour la création d'un formulaire qui est utilisé à la fois pour créer de nouveaux modèles et de modifier des modèles existants?

Existe-il des tutoriels que les gens peuvent me pointer dans la direction d'?

37voto

Protron Points 3889

NerdDinner sera vraiment montrer le chemin.

Créer.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>
   <% } %>

Prendre en compte le fait que cette forme est à l'aide de Html.EditorForModel(), ce qui est une méthode innovante permettant de générer tous les domaines à la fois, et vous avez à étudier ses inconvénients avant de l'utiliser. Mais vous pouvez facilement prendre le reste de l'exemple de séparer votre forme commune de le créer et de modifier des opinions.

Enfin, vous pouvez afficher le contrôleur de code ici si vous êtes intéressé.

11voto

E Rolnicki Points 968

9voto

Craig Stuntz Points 95965

N'utilisez pas le même contrôleur de l'action. Nouveau = HTTP PUT; edit = HTTP POST, donc, c'est deux choses différentes. Les deux actions peuvent et doivent être sur le même contrôleur, bien qu'.

J'aime l'idée d'utiliser un système de contrôle de l'utilisateur pour caractéristiques communes (par exemple, les éditeurs), et l'emballage que dans l'action de vues pour des trucs qui ne doit apparaître que sur de nouvelles ou de modifier, mais pas les deux.

1voto

Perpetualcoder Points 7381

Il pourrait être (doit être OMI), un contrôleur, mais les différentes actions du contrôleur. Assurez-vous également que vous avez la bonne HTTP verbes associés à des mesures appropriées. Suivez le tutoriel posté par E Rolnicki et vous serez sur votre chemin!

Amusez-Vous Bien!!

1voto

Chtiwi Malek Points 1574

ce n'est pas toujours la meilleure solution, car cela dépend du cas, voici comment je l'ai fait

1/ j'ai combiné les actions du contrôleur pour créer et modifier des

public PartialViewResult Creedit(string id = null)
{
    if (id == null)
    {
        // Create new record (this is the view in Create mode)
        return PartialView();
    }
    else
    {
        // Edit record (view in Edit mode)
        Client x = db.ClientSet.Find(id);
        if (x == null) { return PartialView("_error"); }
        // ...
        return PartialView(x);
    }
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Creedit(Client x)
{
    if (x.id == null)
    {
        // insert new record
    }
    else
    {
        // update record
    }
}

2/ j'ai combiné les modifier et de créer des vues en un seul point de vue, je appel Creedit

// if you need to display something unique to a create view
// just check if the Model is null
@if(Model==null){
}

j'ai donc 1 vue et 2 actions (1 poste et 1) au lieu de 2 points de vue et 4 de l'action.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X