Jos*_*ade 5 entity-framework asp.net-mvc-3
我发布后,我无法弄清楚如何让我的模型(EF4)的导航属性不为空.我在几个基本页面上遇到同样的问题.
即我有一个表使用LoginID的外键估计(来自Login表).
在我的HTTPGet Edit方法中,我找到了我想要的具体估计值:
Estimate estimate = db.Estimates.Find(id)
Run Code Online (Sandbox Code Playgroud)
从这里我可以从Login表访问Login导航属性和该记录的任何属性.
我将此估计值作为我的强类型视图的模型.当我调用HTTPPost Edit方法(并将模型作为参数传递给它)时,我的Login导航属性为null,我无法访问其中的任何内容.我当然可以解决这个问题,因为我的估计课程中确实有LoginID字段,但感觉非常笨重,而且我错过了实体框架的一个关键优势.
我在多个页面上遇到同样的问题,我将带有导航属性的模型传递给我的视图,视图返回带有null导航属性的模型.
下面是我遇到问题的代码示例:
[HttpPost]
public ActionResult Edit(Estimate estimate)
{
var test = estimate.Login.CompanyProfileID;
...
Run Code Online (Sandbox Code Playgroud)
我可以在视图中访问Model.Login及其所有属性,所以我知道它正确地传递给了视图.当我的表单提交时,它只是没有将导航属性传递回控制器.
发生的事情是MVC使用称为"模型绑定"的东西,它将POST在页面请求中传递的所有字段与操作参数的匹配属性相匹配.
因此,如果该属性未包含在POST页面的输入字段中,则它不会绑定到您的POST操作中的参数,因此将为null.
因此,您可以为每个属性包含一个隐藏字段Login,例如
@Html.HiddenFor(m => m.Login.ID)
@Html.HiddenFor(m => m.Login.Name)
Run Code Online (Sandbox Code Playgroud)
或者,就像您在解决方法中描述的那样 - 即根据Id重新查询数据库.虽然这看起来很笨拙,但这是一种非常有效的做事方式,因为它避免了必须在整个地方传递隐藏的字段.
| 归档时间: |
|
| 查看次数: |
3627 次 |
| 最近记录: |