在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
如果你之前熟悉MVC5(以及之前的MVC)中的视图的话,有一部分你应该已经很熟悉了。在新的ASP.NET Core 中,那些你熟悉的方式有一部分仍然能用,只是Core版本针对视图又添加了一些东西。这篇文章,我们就来一起看看吧。 #1:数据视图(Typed Views)这是一个不具有动态内容的最基本的一个视图,就是你定义一个ViewModel , 然后ViewModel具有一些默认值,在视图上直接呈现而已。定死的ViewModel,好像不是很常见,以至于你使用Visual Studio新建一个默认的Web应用程序的话,都看不到它。它就看起来像一个 要在你的视图中使用强类型数据对象,你需要定义一个Model来在视图中使用。
这种方式是不是很常见的? 下一种方式是一个更好的方式来布局我们的视图: #2:布局(Layouts):相当于ASP.NET的WebForms的母版页,不过它是定义Razor视图的基本布局的一种方式。它就是
此调用需要在您的视图的第一行中。但你不需要在每一个视图中定义布局,如果你使用Visual Studio新建一个ASP.NET Core项目,Views文件夹有一个 在
在此方法的位置,详情视图就会被渲染到这里。 #3: 区域(Sections)有时候子视图中想在主视图中显示一部分html代码,比如javascript代码或者是css,这个时候就可以使用Sections,通常情况下在页面的结尾部分。 在主视图中(
有一个required参数来声明这个Section是否必须的。然后你就可以在子视图中这样使用:
如果你使用嵌套的布局,你可能需要嵌套这个区域。意思就是你在Section里面嵌套调用
#4: 分部视图( PartialViews)你可以提取html页面中重用的部分,把它放到一个新的Razor视图中,这个视图没有自己的Action,这种视图就叫做分部视图。 分部视图通常也在 分部视图同样也可以是一个数据视图,它可以从父视图中获取数据(但不是必须的):
这个分部视图需要从父视图中获取用户列表的数据
如果你的分部视图没有定义用户模型,你就不需要传第二个参数。 #5:视图组件(ViewComponents)这个 ASP.NET Core特有的。
有时候你需要做一些分部视图的事情,但是又包含一些业务逻辑在里面。在过去,你可以使用ChildAction渲染结果到一个视图中,但是,在 ASP.NET Core中,有一种新的方式来做这件事情,它就是 想这样调用它,来渲染一个
可以看我的博客来学习怎么创建自己的 #6: HTML助手(HtmlHelpers)在
在你的视图中,创建一个可重用的部分是非常有用的,它比分部视图多包含了一些业务逻辑。比HTMLHelpers扩展更好的是新的TagHelpers,但是在扩展你视图的时候,HTMLHelpers仍然有它自己的一些适用的地方。 #7: 标签助手(TagHelper)这是 ASP.NET Core 非常好的一个新特性。 一个扩展你视图的小助手,它看起来像一个原生的HTML标签一样。 在ASP.NET Core MVC中你应该使用 TagHelpers 来替换 HtmlHelpers,因为它们更加的简洁和容易使用。另一个巨大的好处就是依赖注入,在HtmlHelpers中是使用不了的,因为HtmlHelpers 扩展的都是静态内容。 但TagHelpers是一个公共类,我们可以很容易的在它的构造函数中注入服务。 下面是一个很简单的小示例,来展示怎么样定义一个TagHelper:
这里定义了一个叫做 使用:
结果:
ASP.NET Core MVC 已经默认提供了很多TagHelpers来替换以前的HtmlHelpers。例如ActionLink已经被新的TagHelper所替换:
新的TagHelper像这样来创建一个link:
以上两种方式来创建一个a标签的结果:
可以看到,TagHelpers看起来更像原生的HTML,他们在视图中更加的直观,更高的可读性,并且更容易使用。 #8: 依赖注入(Dependency Injection)这也是ASP.NET Core的新特性。 在扩展你的视图的时候,可以使用依赖注入了,这是一个非常大改进。是的,你可以在你的视图中使用DI了。 在StackOverflow和reddit有人这样问? 我认为,不是这样的。 的确,在真正需要的地方你才使用,并且,你使用的时候需要非常小心。 有这样一个有效的场景:你创建一个表单来编辑用户的资料信息(User Profile), 用户可以添加他的公司位置,地址, 国家城市等等,我不愿意从Action到View中传输公司位置 ,地址和国家城市。我只愿意通过用户资料本身(User Profile), 我只想在 Action 中处理用户资料(User Profile)。这时候可以注入服务来给我查询数据,这就是为什么这种情况下它是非常有用的。它可以让我们的Action和ViewModel 保持非常的干净。 在
现在你可以在你的视图中使用 我在这篇博客中写了很多关于依赖注入的博文。 #9: 函数(Functions)在一个ASP.NET MVC 项目中,我从来没有真正的使用过函数这个功能。我只在一个Umbraco的CMS系统中用过一次。不管怎么说,这也是扩展你视图的另一种小技巧。也许你有很复杂视图方面的业务逻辑,在这种情况下,你可以在你的视图中写C#方法:
#10: 配置全局视图(Global view configuration)最后一点,你可以在 总结不管是以前的MVC还是新的Core MVC, 都有很多方法来扩展视图,虽然扩展这些视图的方式有些类似,但是每一种都有它最适合的地方,所以我们在使用这些特性来解决我们的问题的时候,我们应该多加思考,找到最合适的方式。
|
请发表评论