Проблема со связующим по умолчанию (вероятно, простой) - PullRequest
0 голосов
/ 02 мая 2011

Я создаю приложение 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>

При нажатии кнопки отправки (не показано в коде) будет выполнено общедоступное действие ActionResult Edit (пользователь EditUser), но объект пользователя не будет содержать никаких данных?

Вот так выглядит часть 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">

Это должно означать, что вход указывает на правильное свойство.

Стоит упомянуть, что я использую аннотацию данных для проверки объекта, отправляемого в действие, но модель всегда действительна даже при наличии пары полей requre.

Есть идеи, почему это происходит?

1 Ответ

1 голос
/ 03 мая 2011

Вы не показали свою модель, но убедитесь, что она содержит открытые свойства с геттерами и сеттерами и конструкторами по умолчанию без параметров. Пример:

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)
{
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...