gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:12:12 24 4
gpt4 key购买 nike

在我发布后,我无法弄清楚如何让我的模型 (EF4) 的导航属性不为空。我在几个基本页面上遇到了同样的问题。

即我有一张 table
估计
外键为
LoginID(来自 Login 表)。

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

Estimate estimate = db.Estimates.Find(id)

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

我通过这个估计作为我的强类型 View 的模型。当我的 HTTPPost Edit 方法被调用(并且模型作为参数传递给它)时,我的 Login 导航属性为 null,我无法访问其中的任何内容。我当然可以绕过它,因为我的估算类中确实有 LoginID 字段,但感觉真的很笨重,就像我错过了 Entity Framework 的一个关键好处。

我在多个页面上遇到同样的问题,我将带有导航属性的模型传递给我的 View ,并且 View 正在返回带有空导航属性的模型。

以下是我遇到问题的代码示例:
    [HttpPost]
public ActionResult Edit(Estimate estimate)
{

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

我可以在 View 中访问 Model.Login 及其所有属性,所以我知道它正在正确地传递给 View 。当我的表单提交时,它只是不会将导航属性传递回 Controller 。

最佳答案

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

因此,如果属性未包含在 POST 的输入字段中页面,它不会绑定(bind)到您的 POST 中的参数行动,因此,将是空的。

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

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

或者,就像您在解决方法中描述的那样 - 即根据 Id 重新查询数据库。尽管这看起来很笨拙,但这是一种完全有效的做事方式,因为它避免了在各处传递隐藏字段。

关于asp.net-mvc-3 - MVC3 - 为什么回发时导航属性为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11423267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com