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

3

问题就是标题本身。我对MVC不熟悉,现在正在自学。请给我一个清晰的答案,适合初学者理解。谢谢。


2
为什么是负数呢?我在 Google 上搜索过了,但是没有得到清晰的想法。 :( - kbvishnu
1个回答

9

一个部分视图只是一段Html代码,您可以将其保存在单独的文件中,并可在其他视图中重复使用。类似于ASP.NET WebForms中的UserControls。

强类型视图表示它具有与之相关联的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);
}

这个视图使用ViewModel,在文件顶部有@model SomeViewModel标签。

现在,视图有了ViewModel,就可以显示与ViewModel绑定的元素,例如:

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

任何输入到这些字段中的数据都与ViewModel绑定。当用户点击提交按钮时,这些输入的值将被发送回服务器。
如我之前所说,局部视图是可重用的Html片段。因此,在同一个视图中,我可以添加我的局部视图。假设我有一个包含标准Html片段的局部视图,我想在整个站点上重复使用它,比如页脚。
我可以创建一个.cshtml文件,并将其放在其中。
<div> footer text here</div>

然后将其包含在任何视图中,无论它是否是强类型的,都可以重复使用Html标签。

@model SomeViewModel

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

{@Html.RenderPartial("MyFooter")}

谢谢回答。那么有什么优势吗?你能再详细解释一下吗? - kbvishnu
@VeeKeyBee 这个问题有点像“教程”式的。你试过用谷歌搜索你的问题吗? - George Stocker
@GeorgeStocker 再次感谢您的解释和让我在谷歌中搜索。我一定会再回来的。希望您能再次帮助我 :). 我看到了它,但对于我来说,很难理解这段代码。让我再读一遍。 - kbvishnu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接