我问,因为我要创建的局部视图是空白的,目的是创建一个新的子实体。我只需要一个快速的,无论是否脏的方式从局部视图中访问父模型。我需要父母的身份证。
部分视图是否可以自动访问父模型?
答案 0 :(得分:14)
除非在渲染时将某些值作为参数传递给此部分,否则无法从局部视图访问父模型。例如,在主视图中:
@model MyViewModel
...
@Html.Partial("_myPartial", new ViewDataDictionary(new { id = Model.Id }));
然后在您的部分内部,您可以访问Id
:
<div>@ViewBag.Id</div>
当然,这是将数据传递到局部视图的一种非常糟糕的方式。正确的方法是使用强类型视图模型。
答案 1 :(得分:2)
我知道这是一个古老的话题,但我想我还是会在同样的问题上添加我的解决方案。我认为它有点清洁。
基本上将模型添加到局部视图中。
封装视图:
@model whatever
...
@Html.Partial("partialview", anotherwhatever)
部分视图:
@model anotherwhatever
<div>@Model.something</div>
...
在我的情况下,我只需要将一个字符串传递给局部视图(只是使用它来缩短和分区代码),所以这比其他解决方案更优雅。
我首先尝试了另一个解决方案,实际上无法让它工作,它只是表现为我传递的值是空白的。
答案 2 :(得分:1)
这最终为我工作。
@model MyViewModel
...
@Html.Partial("_myPartial", new ViewDataDictionary { { "id", Model.Id } })
在局部视图中,使用了这个......
<div>@ViewBag.id</div>
答案 3 :(得分:1)
在正常情况下,您可以并且应该将值向下传递给局部变量,但是我们遇到了一个极端的情况,这没有任何意义。如果您绝对确定必须这样做,则可以按如下所示轻松访问父模型或ViewBag:
// Get the parent's model
var model ViewContext.Controller.ViewData.Model as MyType
// Get the parent's ViewBag
var value = ViewContext.Controller.ViewBag.MyVariableName as MyType
我们遇到的情况具有以下限制,导致我们不得不使用此限制:
答案 4 :(得分:0)
您可以通过模型IE:
封装视图:
@model MyModel
@Html.Partial("_myPartial", Model)
部分视图:
@model MyModel
Id = @Model.Id;