在MVC中,局部视图和强类型视图之间有什么区别?

时间:2012-06-08 12:20:32

标签: asp.net-mvc

问题是标题本身。我是MVC的新手,现在我正在学习自学。请给我答案,这对于MVC更新鲜是明确的。感谢。

1 个答案:

答案 0 :(得分:9)

部分视图只不过是Html的“片段”,您可以将其保存在单独的文件中,您可以在其他视图中重复使用。类似于ASP.NET WebForms中的UserControl。

强类型视图意味着它有一个与之关联的ViewModel控制器传递给它,并且该视图中的所有元素都可以使用那些ViewModel属性

您也可以使用强类型部分。这意味着Html片段需要特定的数据,因此您可以将其键入特定的ViewModel

以下是强类型视图的示例

@model SomeViewModel

...// all the html comes after

非强类型的视图没有@model SomeViewModel

以下是在没有ViewModel

的情况下呈现普通视图的控制器操作示例
public ActionResult Index() {
    return View();
}

这是一个呈现强类型视图的视图

public ActionResult Index() {
    var model = new SomeViewModel();
    return View(model);
}

该视图通过在文件顶部放置@model SomeViewModel来使用该ViewModel。

现在视图有一个ViewModel,我可以显示绑定到ViewModel的元素,如

@Html.TextBoxFor(m => m.FirstName)
@Html.CheckBoxFor(m => m.IsAwesome)

因此,输入这些字段的任何数据都绑定到ViewModel。当用户单击提交按钮时,这些输入的值将被发送回服务器。

正如我之前所说,部分视图是可重复使用的Html。所以在同一个视图中我可以添加我的部分内容。假设我有一个局部视图,其中包含一些标准的Html,我想在我的网站上重复使用,比如页脚

我可以创建一个.cshtml文件并将其放入其中

<div> footer text here</div>

然后将它包含在任何View中,无论是否强类型都无关紧要,它只是可重复使用的Html

@model SomeViewModel

@Html.TextBoxFor(m => m.FirstName)
@Html.CheckBoxFor(m => m.IsAwesome)

{@Html.RenderPartial("MyFooter")}