5

我正在将一些数据从我的控制器传递给一个视图,我希望将其显示在该视图内的部分视图中(不要问,这很复杂)。我知道我什至不应该将模型传递给为另一个视图指定的视图,但我注意到部分视图实际上是从父视图继承模型:

public ActionResult Index(){

 Person p = new Person
 {
    FName = "Mo",
    LName = "Sep"

 };

 return View(p);

}

然后在我的Index视图中我有:

<h2>Index</h2>

@Html.Partial("_IndexPartial")

在里面_IndexPartial我有:

@Model.FName 

这会打印“Mo”。

这种行为是否类似于 WPF 中的子控件继承其父视图的数据上下文的行为?在您的应用程序中使用它是否被认为是不好的做法?

谢谢。

4

2 回答 2

4

这种行为是否类似于 WPF 中的子控件继承其父视图的数据上下文的行为?

是的。

我看到您当前没有将任何模型传递给仅继承布局然后根本不需要使用部分布局是否可行?

如果您想继续使用它,也许只是更明确地说明它,并将当前模型传递给部分。

@Html.Partial("_IndexPartial", Model)

如果您查看 Html.Partial(view) 的源代码:

public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName)
{
    return Partial(htmlHelper, partialViewName, null /* model */, htmlHelper.ViewData);
}

它通过 htmlHelper.ViewData 传递模型,您可以使用 @{ViewData.Model} 在视图中以相同的方式访问模型,但这不是一个好习惯。

于 2012-11-17T14:17:43.633 回答
1

您可以使用重载将模型作为第二个参数传递到局部视图中:

@Html.Partial("viewname", Model)

这种方法 IMO 没有任何问题,因为它是强类型视图的重点以及它们带来的好处......

于 2012-11-17T14:05:19.077 回答