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

asp.net-mvc-3 – MVC3 – 为什么回发时导航属性为null

发布时间:2020-12-16 07:04:49 所属栏目:asp.Net 来源:网络整理
导读:我发布后,我无法弄清楚如何让我的模型(EF4)的导航属性不为空.我在几个基本页面上遇到同样的问题. 即我有一张桌子 估计 用外键 LoginID(来自Login表). 在我的HTTPGet Edit方法中,我找到了我想要的具体估计值: Estimate estimate = db.Estimates.Find(id) 从
我发布后,我无法弄清楚如何让我的模型(EF4)的导航属性不为空.我在几个基本页面上遇到同样的问题.

即我有一张桌子
估计
用外键
LoginID(来自Login表).

在我的HTTPGet Edit方法中,我找到了我想要的具体估计值:

Estimate estimate = db.Estimates.Find(id)

从这里我可以从Login表访问Login导航属性和该记录的任何属性.

我将此估计值作为我的强类型视图的模型.当我调用HTTPPost Edit方法(并将模型作为参数传递给它)时,我的Login导航属性为null,我无法访问其中的任何内容.我当然可以解决这个问题,因为我的估计课程中确实有LoginID字段,但感觉非常笨重,而且我错过了实体框架的一个关键优势.

我在多个页面上遇到同样的问题,我将带有导航属性的模型传递给我的视图,视图返回带有null导航属性的模型.

下面是我遇到问题的代码示例:

[HttpPost]
    public ActionResult Edit(Estimate estimate)
    {

        var test = estimate.Login.CompanyProfileID;
        ...

我可以在视图中访问Model.Login及其所有属性,所以我知道它正确地传递给了视图.当我的表单提交时,它只是没有将导航属性传递回控制器.

解决方法

发生的事情是MVC使用称为“模型绑定”的东西,它将POST在页面请求中传递的所有字段与操作参数的匹配属性相匹配.

因此,如果该属性未包含在POST页面的输入字段中,则它将不会绑定到POST操作中的参数,因此将为null.

因此,您可以为Login中的每个属性添加一个隐藏字段,例如

@Html.HiddenFor(m => m.Login.ID)
@Html.HiddenFor(m => m.Login.Name)

或者,就像您在解决方法中描述的那样 – 即根据Id重新查询数据库.虽然这看起来很笨拙,但这是一种非常有效的做事方式,因为它避免了必须在整个地方传递隐藏的字段.

(编辑:李大同)

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

    推荐文章
      热点阅读