Domanda

Sto costruendo un'applicazione ASP.NET MVC 2 e ho un controller che contiene le seguenti azioni:

public ActionResult Edit()
{
  ...
}

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

A questo ho ottenuto una visione da digitare di Stronge che assomiglia a questa:

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

Quando si prevede il pulsante di invio (non mostrato nel codice) l'azione pubblica ActionResult Edit (EdiTUSER USER) verrà premuta ma l'oggetto utente non conterrà alcun dato?

Ecco come sembra parte dell'HTML:

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

Ciò dovrebbe significare che l'input è indicato sulla proprietà corretta.

Vale la pena menzionare che utilizzo l'annotazione dei dati per convalidare l'oggetto inviato all'azione, ma il modello è sempre valido anche quando ho un paio di campi requre.

Qualche idé perché sta accadendo?

È stato utile?

Soluzione

Non hai mostrato il tuo modello ma assicurati che contenga proprietà pubbliche con getter e setter e costruttori senza parametri predefiniti. Esempio:

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

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

Finalmente prova a rinominare l'argomento dell'azione a qualcos'altro diverso da user (solo per testare):

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(EditUser u)
{
    ...
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top