2010-09-24 31 views
6

在处理1 ---> 0 ... 1关系时,我试图为0 ... 1端使用单独的局部视图。为了提高效率,我想使用RenderPartial()而不是RenderAction()。ASP.NET MVC2 - 是否可以从部分视图访问父视图的模型数据?

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

难道这只是一个令人伤心的尝试,甚至不应该被认为是第一位?

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

+1

是否很难将Id传递给局部视图? – 2010-09-24 18:00:04

+0

部分视图需要类型(0 ... 1端)的模型,该模型只包含指向父端的导航属性。 – asfsadf 2010-09-24 18:36:19

回答

4

整理。

如果您未将模型传递到RenderPartial,则默认传递父视图。所以你可以通过部分的Model属性来访问它。

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

难道这只是一个不应该被认为是首当其冲的恶作剧吗?

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

+0

嗯......它抱怨传递了错误的类型...... – asfsadf 2010-09-24 18:41:45

+0

如果(1)部分是强类型的,并且(2)父类和部分类型需要不同类型,它将具有“错误”类型。 – 2010-09-24 19:01:59

+1

确实。我试图保留分离,用于绑定/验证目的,并且认为在这种情况下我可能不得不追求另一种“混杂”。可能会在ParentObjectID上作为ChildObject的一个属性。伊克。 – asfsadf 2010-09-24 19:23:06

3

首先问你为什么需要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); 
} 

或类似的东西。这将取决于事情是如何建立起来的,但这是总体思路。

+0

这非常有帮助,谢谢! – scolja 2012-10-24 03:38:07

+0

这是有道理的 - 在我的情况下,我只需要父级的单个派生属性,所以它实际上是有意义的,只是从父级生成该属性,然后在我生成viewmodel对象的孩子创建它。 – neminem 2017-08-18 21:54:00

相关问题