2013-03-10 110 views
10

我在问,因为我创建的部分视图是空白的,目的是创建一个新的子实体。我只需要一个快速的,不管是不是很脏的方法来从部分视图中访问父模型。我需要父母的身份证。从部分视图访问父模型

部分视图是否自动访问父级模型?

+0

你的问题还不清楚。 – 2013-03-10 12:26:03

+0

你可以发布一些代码,并帮助我们了解什么不是你想要的? – 2013-03-10 12:33:21

回答

10

除非在渲染时将某个值作为参数传递给此部分,否则无法从部分视图访问父模型。例如,在你的主观点:

@model MyViewModel 
... 
@Html.Partial("_myPartial", new ViewDataDictionary(new { id = Model.Id })); 

,然后里面的部分,你可以访问Id

<div>@ViewBag.Id</div> 

当然,这是将数据传递到一个局部视图的非常糟糕的方式。正确的方法是使用强类型视图模型。

+0

我不知道这个例子不正确。我看到传入ViewDataDictionary的主视图,但通过ViewBag检索局部视图。 ViewBag和ViewData是不同的,是吗? – 2014-02-27 18:57:09

+3

不,ViewBag和ViewData使用的是完全相同的存储。当你写'ViewBag.FooBar'时,就好像你在写'ViewData [“FooBar”]'。顺便说一下,你不应该使用任何这些。您应该使用强类型视图模型。 – 2014-02-27 21:56:12

+0

所以你在说要做到这一点的正确方法是将表达式要求移动到控制器逻辑中,然后填充列表项 - 以部分列表的形式显示 - 用父项的标识符显示,就这样它就可以用于建立链接? MVC是幻想吗? – john 2016-12-16 08:57:14

2

我知道这是一个老话题,但我想我只是将我的解决方案添加到同样的问题。我认为它有点干净。

基本上将一个模型添加到局部视图。

包封视图:

@model whatever 
... 
@Html.Partial("partialview", anotherwhatever) 

局部视图:

@model anotherwhatever 
<div>@Model.something</div> 
... 

在我的情况我只需要通过一个串入局部视图(只用它来缩短和分区代码) ,所以这比其他解决方案更加优雅。

我先尝试了另一种解决方案,实际上无法让它正常工作,它只是充当了我传递的值为空的值。

+0

完美:)谢谢 – Kaken 2017-03-09 11:16:57

0

这最终为我工作。

@model MyViewModel 
... 
@Html.Partial("_myPartial", new ViewDataDictionary { { "id", Model.Id } }) 

和局部视图,用于这里面......

<div>@ViewBag.id</div> 
相关问题