【问题标题】:Problem with defaul binder (probably simple)默认活页夹的问题(可能很简单)
【发布时间】:2011-05-02 18:27:31
【问题描述】:

我正在构建一个 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 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">

这应该意味着输入指向了正确的属性。

值得一提的是,我使用 Data annotation 来验证发送到 action 的对象,但即使有几个 requre 字段,模型也始终有效。

知道为什么会这样吗?

【问题讨论】:

    标签: asp.net-mvc-2 defaultmodelbinder strongly-typed-view


    【解决方案1】:

    您尚未展示您的模型,但请确保它包含带有 getter 和 setter 的公共属性以及默认的无参数构造函数。示例:

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

    最后尝试将 action 参数重命名为 user 以外的其他名称(只是为了测试):

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

    【讨论】:

    • 只需将参数名称更改为 u 而不是用户?为什么?
    猜你喜欢
    • 1970-01-01
    • 2020-09-10
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多