Проблема с Dellaul Binder (вероятно, просто)
-
28-10-2019 - |
Вопрос
Я строю приложение ASP.NET MVC 2 и имею контроллер, который содержит следующие действия:
public ActionResult Edit()
{
...
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(EditUser user)
{
...
}
На это я получил треск на печати, который выглядит так:
<%@ 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>
При нажатии кнопки «Отправить» (не отображается в коде), будет нанесено действие публичное действие Edit (Edituser User), но объект пользователя не будет содержать никаких данных?
Так выглядит часть 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">
Это должно означать, что ввод указывается на правильное свойство.
Стоит упомянуть, что я использую аннотацию данных для проверки объекта, отправленного в действие, но модель всегда действительна, даже если иметь пару полей.
Кто -нибудь ИДЕЕ зачем это происходит?
Решение
Вы не показали свою модель, но убедитесь, что она содержит общественные свойства с помощью Getters и Setters и конструкторов без параметра по умолчанию. Пример:
public class EditUser
{
public UserModel User { get; set; }
}
public class UserModel
{
[Required]
public string UserEmail { get; set; }
}
Наконец -то попробуйте переименовать аргумент в действие на что -то другое, кроме user
(просто чтобы проверить):
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(EditUser u)
{
...
}