Dar*_*bio 15 asp.net-mvc controller html-helper view asp.net-mvc-3
我使用脚手架代码创建了一个强类型的MVC3 Razor视图.
该模型是一个POCO,其基本类型PersistentEntity定义了一个名为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)
Run Code Online (Sandbox Code Playgroud)
在页面上,正确呈现隐藏的输入,并在值中设置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">
Run Code Online (Sandbox Code Playgroud)
但是,当页面提交给控制器时[HttpPost]Edit(Model model),Id属性始终为0.已创建和更新已使用View中的值正确填充.

对于这篇文章中的例子,这应该是12.出了什么问题?
我知道我可以将方法签名更改[HttpPost]Edit(int personID, Person model)为personID在get字符串中,但为什么模型没有填充隐藏字段?
更新
问题是setter on PersistentEntity受到保护,ASP无法设置属性,并吞下它.将此更改为公开已解决了该问题.
public abstract class PersistentEntity
{
public virtual int Id { get; protected set; }
public virtual DateTime Created { get; set; }
public virtual DateTime Updated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 14
public virtual int Id { get; protected set; }
Run Code Online (Sandbox Code Playgroud)
protected set; <!--那是你的问题.如果希望默认模型绑定器能够分配值,则需要公共设置器.
| 归档时间: |
|
| 查看次数: |
17974 次 |
| 最近记录: |