加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – MVC3 Html.HiddenFor(Model => Model.Id)不

发布时间:2020-12-15 23:40:32 所属栏目:asp.Net 来源:网络整理
导读:我使用脚手架代码创建了一个强类型的MVC3剃刀视图. 该模型是一种基本类型为PersistentEntity的POCO,它定义了一个名为Created,Updated和Id的属性. Id是一个int,创建和更新是DateTime. 我使用Html.HiddenFor在视图上创建隐藏字段. @Html.HiddenFor(model = mod
我使用脚手架代码创建了一个强类型的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能够分配该值,则需要一个公共设置器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读