0

我有一个简单的 MVC 模型,如下所示:

public class SomeClass
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Please provide a name for the blah blah blah")]
    public string Name { get; set; }
}

...我有这样的看法(简化):

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CompanyName.Web.Models.SomeClassViewModel>" %>

<form method="post" action="/someclass/add">
    <%=Html.HiddenFor(m => m.SomeClass.Id)%>

    <div>
        <%=Html.LabelFor(m => m.SomeClass.Name)%>
        <%=Html.TextBoxFor(m => m.SomeClass.Name, new { @class = "form-medium" })%>
    </div>
</form>

在提交表单时,我的控制器会验证ModelState类似的内容:

[HttpPost]
public ActionResult Add(Models.SomeClassViewModel model)
{
    if (ModelState.IsValid)
    {
        ...
    }
}

我得到一个模型验证错误

“ID 字段是必需的。”

为什么会出现这种情况?

默认情况下,该Id字段被分配为 0(应该如此),然后它将被传递到数据层以创建记录,所以我看不出问题出在哪里?

任何帮助,将不胜感激。

4

3 回答 3

1

好的,所以我发现了问题所在。

在我的视图模型类 ('SomeClassViewModel') 的构造函数中,我添加了一行代码,该代码调用了 'SomeClass' 属性的默认构造函数。

我通过检查“Id”验证键的 ModelState 错误发现了这一点,并看到“AttemptedValue”属性是一个空字符串,它应该是 0。将此属性实例化为“SomeClass”的实例修复了它。

我希望这可以帮助可能遇到同样问题的人!

于 2013-02-27T09:46:05.540 回答
0

如果您更改 Id 变量的名称或将数据类型更改为字符串,会发生什么情况?

于 2013-02-26T16:56:35.967 回答
0

确保Models.SomeClassViewModel该类也具有Id相同类型和变量名称的字段。

如果不是这种情况,你也可以试试这个:

[HttpPost]
public ActionResult Add(SomeClass model)
{
    if (ModelState.IsValid)
    {
        ...
    }
}
于 2013-02-26T16:56:53.343 回答