asp.net-mvc – MVC3 Html.HiddenFor(Model => Model.Id)不传回给控制器

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – MVC3 Html.HiddenFor(Model => Model.Id)不传回给控制器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用脚手架代码创建了一个强类型的MVC3剃刀视图.

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

Id是一个int,创建和更新是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.创建和更新已正确填充了来自View的值.

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

我知道我可以将person签名变为[HttpPost] Edit(int personID,Person model),但是为什么模型没有被隐藏的字段填充?

更新

问题是在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; }
}

解决方法

public virtual int Id { get; protected set; }

保护套<! - 这是你的问题.如果您希望默认模型binder能够分配该值,则需要一个公共设置器.

猜你在找的asp.Net相关文章