【问题标题】:ASP.NET MVC2 - is it possible to access parent view's model data from partial view?ASP.NET MVC2 - 是否可以从部分视图访问父视图的模型数据?
【发布时间】:2011-04-16 22:11:23
【问题描述】:

在处理 1--->0...1 关系时,我尝试为 0...1 端使用单独的局部视图。为了效率,我想使用 RenderPartial() 而不是 RenderAction()。

是否可以从此局部视图访问包含视图的模型数据,以便访问主对象的 PK/ID?

这是否只是一个可悲的尝试,甚至不应该首先考虑?

有没有人有更好的例子来说明如何使用 MVC 处理这种 1--->0...1 关系?

【问题讨论】:

  • 局部视图中传入Id难吗?
  • 局部视图需要一个类型为(0...1 端)的模型,它只包含一个指向父端的导航属性。

标签: asp.net-mvc asp.net-mvc-2 partial-views


【解决方案1】:

有点。

如果不给RenderPartial传递模型,默认传递父视图。因此,您可以通过部分的 Model 属性访问它。

但如果你确实传递了一个模型,那么不,部分无法看到父模型,因为它看到的是自己的模型。

这是否只是一次不应该被考虑的黑客攻击的悲哀尝试?

我会说“kludge”而不是“hack”,但是是的,可能。 :)

【讨论】:

  • 如果 (1) 部分是强类型并且 (2) 父和部分需要不同的类型,它将具有“错误”类型。
  • 确实如此。为了绑定/验证的目的,我试图保留分离,并认为在这种情况下我可能不得不追求一种不同的“kludge”。可能最终将 ParentObjectID 作为 ChildObject 的属性。伊克。
【解决方案2】:

先问为什么需要PK?

但是,如果我真的需要它,我会在子模型中拥有 ParentID 属性。然后,您只需在发送之前设置它。

foreach(var vChild in Model.Children)
{
    vChild.ParentID = Model.ID;
    Html.RenderPartial(ViewName, vChild)
}

如果您需要来自父级的所有数据,那么您可以使用父级属性并设置整个属性。

这个逻辑更适合放在模型本身中,但是像这样:

List<Children> mChildren;
public void AddChild(Child tChild)
{
     tChild.ParentID = this.ID;
     mChildren.Add(tChild);
}

或类似的东西。这实际上取决于事情已经如何设置,但这是一般的想法。

【讨论】:

  • 这是有道理的——在我的情况下,我只需要一个来自父级的派生属性,所以实际上只需要从父级生成该属性然后在子级中创建它就像我一样m 生成视图模型对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 2020-08-23
  • 1970-01-01
相关资源
最近更新 更多