详解ASP .网络核心2.0视图引擎(译)
问题
如何在ASP .网络核心2.0中使用剃刀引擎来创建视图?
答案
新建一个空项目,修改Startup.cs,添加手动音量调节服务和请求中间件:
public void ConfigureServices(IServiceCollection services){ services .AddMvc();}公共void Configure(IApplicationBuilder应用程序,ihostingenvirmentenv){ if(env .IsDevelopment()) { app .usedeveloper异常页();}应用程序.UseMvc(routes={ routes .MapRoute(名称: '默认',模板: ' {控制器=Home }/{操作=Index }/{ id?}');});} 添加控制器目录,并添加家庭控制器控制器:
公共类HomeController : Controller { public IActionResult Index(){ return View();}} 添加视图/主页目录,并添加剃刀视图Index.cshtml:
@{ var生日=新的日期时间(1930,8,26);} strong你好MVC Razor/strong pJames Bond,你出生于@生日to string(' yyyy-MM-DD ')/p pJames Bond约为@((DateTime .现在-出生日期)。天数/365)岁/p p @(' strong hello World/strong ')/p p @ Html .raw(' strong[电子邮件保护]/strong ')/p @ { var isHungry=true;定义变量性别=0;ienumerablesting friends=new[]{ ' Thor ',' Hulk ','钢铁侠' };定义变量技术=' ASP.NET mvcvar计数=技术count();} p @ if(ishungrey){ textI饿了/text } else { textI饱了/text }/p @ switch(性别){ case 0: PMale/p break;案例1: pfe公/母断点;default : break } @ for(int I=0;一、技术。长度;我){ @科技[i].ToString().ToUpper()} ul @foreach(朋友中的定义变量项目){ Li @ item/Li }/ul @ try { var a=1;var b=0;定义变量结果=a/b;//被零除)捕获(异常ex){ p@ex。消息/p}此时的目录结构如下所示:
运行,此时页面显示:
讨论
当控制器返回查看结果时,ASP .净核心中间件会查找并执行剃刀模板(.cshtml文件)。剃刀模板使用C#和超文本标记语言的混合语法来生成最终的超文本标记语言页面。
查找视图
当查看结果执行时,它会按照如下顺序查找视图所在路径:
1.视图/[控制器]/[操作]。cshtml
2.视图/共享/[操作]。cshtml
如果模板文件名和控制器方法的名称不一致,可以在查看结果中通过参数来指定视图模板的名称:
public IActionResult about me(){ 0返回视图(“生物”);}剃须刀语法
超文本标记语言标签会原封不动的渲染到最终的超文本标记语言页面中:
强烈的你好手动音量调节剃须刀/strong通过@符号从超文本标记语言过渡到C#代码C#。代码块可以用如下结构包含起来:
@{ var生日=新的日期时间(1930,8,26);} C#表达式可以直接通过@符号来输出到最终超文本标记语言页面:
pJames Bond,你出生于@生日. ToString('yyyy-MM-dd')/p或者用@(//C#表达式)来包含起来:
pJames债券约为@((DateTime .现在-出生日期)。天数/365)岁/p剃刀默认会对C#表达式进行超文本标记语言编码,观察下面的剃刀代码以及生成到页面上的超文本标记语言结构:
p @(' strong hello World/strong ')/p p strong hello World/strong/p(9502 . 163.com)
@Html .生的可以避免C#表达式被超文本标记语言编码,如下所示:
p@Html .原始(' strong[电子邮件保护]/strong ')/p PS treng[电子邮件保护]/strong/p
控制结构
剃刀视图中,我们可以在C#代码块中使用各种控制结构,比如@if,@switch,@for,@foreach,@while,@do while和@尝试。具体示例可以查看视图/主页/索引代码。
指令
剃刀视图会被转化为继承自RazorPage的C#类(内部实现,对用户透明)。而指令可以改变这些类或者视图引擎的行为。常用的指令有:
@使用
向生成的C#类添加一个使用指令。类似于普通的C#类,这个指令用来导入命名空间。
@model
指定传入RazorPage的泛型类型t。当控制器返回查看结果时,可以通过参数来指定模型类型。然后在视图页面中通过模型属性来获取模型实例。
@注入
用来向视图注入服务(首先需要在启动中在服务容器中注册此服务)。你需要提供服务类型和名称(视图中通过此名称访问服务)。视图的依赖注入用于为视图提供强类型的数据查询服务,否则我们就需要动态的可视数据或者视图包属性来实现。
视图的依赖注入
下面通过一个较完整的示例来讲解@使用,@模型和@注入指令的用法。
首先创建一个服务:
公共接口IGreeter{ string Greet(字符串名字,字符串姓氏);}公共类大于: IGreeter {公共字符串Greet(字符串名字,字符串姓氏){返回$ ' Hello { firstname } {姓氏} ';}} 在启动的服务容器中注册此服务:
public void ConfigureServices(IServiceCollection services){ services .AddScopedIGreeter,Greeter();服务addMVc();} 创建一个模型:
关于viewmodel的公共类{公共字符串名字{ get设置;}公共字符串姓氏{获取设置;}} 从控制器方法中返回模型实例:
公共类HomeController : Controller { public IActionResult Index(){ return View();} public IActionResult about me(){ var model=new about view model {名字=' Tahir ',姓氏=' Naushad ' };返回视图("生物",模型);}} 现在我们可以在视图中使用模型和服务了:
@使用剃刀引擎.models @ model about view model @ inject IGreeter更大的服务p @更大的服务.问候(模特。名字,型号。姓氏)/p运行,此时页面显示:
源代码下载
原文:https://tahirnaushad。com/2017/08/23/ASP-NET-core-2-0-MVC-razor/
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
版权声明:详解ASP .网络核心2.0视图引擎(译)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。