Question

Je construis une application ASP.NET MVC 2 et disposez d'un contrôleur qui contient les actions suivantes:

public ActionResult Edit()
{
  ...
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(EditUser user)
{
  ...
}

Pour cela, je me suis vue stronge typé qui ressemble à ceci:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/MasterPages/DefaultMasterPage.Master" Inherits="System.Web.Mvc.ViewPage<MyApp.Views.ViewClasses.EditUser>" %>
<%@ Import Namespace="MyApp.Views.Helpers" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
 <% Html.EnableClientValidation(); %>
  <% using (Html.BeginForm("Edit", "Account", FormMethod.Post, new { enctype = "multipart/form-data", @id = "edit_account" }))
   {%>
     <%: Html.LabelFor(model => model.User.UserEmail, false) %>
     <%: Html.TextBoxFor(model => model.User.UserEmail, new { @class = "tb1" })%>
     ...
<% } %>
</asp:Content>

Lorsque vous frappez le bouton d'envoi (non représenté dans le code) l'action publique ActionResult Edit (utilisateur EditUser) sera frappé, mais l'objet utilisateur ne contient pas toutes les données?

Voici comment une partie de l'aspect html comme:

<div class="controlTitleContainer"><div class="text"><label for="User_UserEmail">Mailadress</label></div></div>
<input type="text" value="" name="User.UserEmail" id="User_UserEmail" class="tb1">

Cela devrait signifier que l'entrée est pointée vers la propriété correcte.

Il convient de mentionner que j'utilise l'annotation de données pour valider l'objet envoyé à l'action, mais le modèle est toujours valable même si avoir deux champs requre.

Toute idé pourquoi cela se passe?

Était-ce utile?

La solution

Vous n'avez pas montré votre modèle, mais assurez-vous qu'il contient des propriétés publiques avec des accesseurs et les constructeurs par défaut sans paramètre. Exemple:

public class EditUser
{
    public UserModel User { get; set; }
}

public class UserModel
{
    [Required]
    public string UserEmail { get; set; }
}

Enfin essayer de renommer l'argument d'action à autre autre chose que user (juste pour test):

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(EditUser u)
{
    ...
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top