MVC3 Html.HiddenFor(Model => Model.Id)没有传回Controller

时间:2011-09-26 10:04:32

标签: asp.net-mvc asp.net-mvc-3 view controller html-helper

我使用脚手架代码创建了一个强类型的MVC3 Razor视图。

该模型是一个基础类型为PersistentEntity的POCO,它定义了一个名为Created,Updated和Id的属性。

Id是一个int,Created和Updated是DateTime。

我正在使用Html.HiddenFor在视图上创建隐藏字段。

@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.Created)
@Html.HiddenFor(model => model.Updated)

在页面上,正确呈现隐藏的输入,并在值中设置Id。

<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Id" name="Id" type="hidden" value="12">

但是,当页面提交给控制器[HttpPost]Edit(Model model)时,Id属性始终为0.已创建和更新已使用视图中的值正确填充。

enter image description here

在这篇文章的例子中,这应该是12。出了什么问题?


我知道我可以将方法签名更改为[HttpPost]Edit(int personID, Person model),因为personID在get字符串中,但为什么模型没有填充隐藏字段?


更新

问题是PersistentEntity上的setter受到保护,ASP无法设置属性,并吞下它。将此更改为公开已解决了这个问题。

public abstract class PersistentEntity
{
    public virtual int Id { get; protected set; }
    public virtual DateTime Created { get; set; }
    public virtual DateTime Updated { get; set; }
}

1 个答案:

答案 0 :(得分:14)

public virtual int Id { get; protected set; }

protected set; <!--这是你的问题。如果您希望默认模型绑定器能够分配值,则需要公共设置器