在MVC中,部分视图是否继承了父视图的模型?

时间:2012-11-17 13:34:29

标签: asp.net-mvc inheritance asp.net-mvc-partialview

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

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中的行为相同,其中子控件继承其父View的数据上下文?在您的应用程序中使用它会被认为是不好的做法吗?

感谢。

2 个答案:

答案 0 :(得分:4)

  

此行为是否与子控件的WPF中的行为相同   继承其父View的数据上下文?

是。

我看到你目前没有通过任何模型 它是否可以继承布局,然后根本不需要使用部分?

如果你想继续像你一样使用它,也许只是更明确一点,并将当前模型传递给部分。

@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}以相同的方式访问模型,但这是 NOT 一个好习惯。

答案 1 :(得分:1)

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

@Html.Partial("viewname", Model)

这种方法没有任何问题IMO作为强烈类型观点的重点及其带来的好处......