脚本宝典收集整理的这篇文章主要介绍了ASP.NET Core MVC Razor小记,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
常规的页面一般由头部导航、左侧菜单、中间主体内容主成,而其中唯一变动的基本就只有中间主体内容了,而Layout模板就是用来做这样一件事,编写好模板,需要变动的地方则使用@RenderBody()方法
我们尝试在_Layout模板的footer标签中增加一点内容,运行程序,发现也会跟着改动,明明在Index文件中未作任何操作
这是因为有_ViewStart的存在,发现里面默认有这样一行代码
@{
Layout = "_Layout";
}
如果在Index中头部未声明使用任何模板则会使用ViewStart定义的默认模板,默认一般是不定义,如果赋值为null或其它默认,则优先使用页面中定义的
_ViewStart.cshtML-->_Index.cshtml-->_Layout.cshtml
我们尝试将ViewStart的Layout设置为_Layout1,运行程序,可以看到报错了
View的查找规则:先查找Controller对应的文件夹,若未找到,则到View/Shard和Pages/Shard文件夹查找,若最终还是未找到,则抛出异常
以下是在视图中使用TagHelper和HtmlHelper对比
@model HelloCore.Models.Book
@{
Layout = null;
}
@*HtmlHelper*@
@Html.EdITorFor(m=>m.Name)
@Html.LabelFor(m=>m.Name)
<br />
@*TagHelper*@
<label asp-for=Name></label>
<input asp-for=Name />
通过浏览器F12看看这俩到底有啥区别
emm..目前看起来生成后的代码是没有多大区别,个人感觉主要区别还是在写法上,TagHelper相对HtmlHelper更为接近原生写法
比如,现在给它们都加一个样式,看看二者的写法
创建一个类,名称建议以TagHelper结尾,并继承自TagHelper
重写PRocessAsync方法
public class LabelTagHelper : TagHelper
{
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
//校验label是否设置了show-type
if (output.Attributes.TryGetAttribute("show-type",out TagHelperAttribute tagHelperAttribute))
{
//校验设置的show-type是否为bookCode
if (tagHelperAttribute.Value.ToString().Equals("bookCode"))
{
//设置该标签的class为codeColor样式
output.Attributes.setattribute("class", "codeColor");
//获取标签的Contne内容
string content = output.Content.IsModified ? output.Content.GetContent() : (await output.GetChildContentAsync()).GetContent(); ;
//设置Content
output.Content.SetContent($"MVP{content}");
}
}
}
}
效果如下:
之所以会“乱码”,应该是编码问题,转一下就OK了
在_ViewImports中添加一行
@addTagHelper *,HelloCore
表示添加该程序集下所有TagHelper
目前上面这种方式只能作用于label标签,如果p标签也要用,可以在类上加上特性注解
[HtmlTargetElement("p")]
public class LabelTagHelper : TagHelper{
}
但这样一来,label标签上就不起作用了
改造一下:
[HtmlTargetElement("p", Attributes = "show-type", ParentTag = "div")]
[HtmlTargetElement("label", Attributes = "show-type", ParentTag = "div")]
public class LabelTagHelper : TagHelper{
}
如果HtmlTargetElement设置多个,则是or的关系,也就是只要满足一个就会生效,通过Attributes和ParentTag属性会极大的缩小要作用的对象范围,ParentTag表示父标签
如果个别标签想要屏蔽TagHelper,则可以在标签尖括号后加上叹号
<!label show-type="bookCode" asp-for=Name class=codeColor></!label>
未完待续...
以上是脚本宝典为你收集整理的ASP.NET Core MVC Razor小记全部内容,希望文章能够帮你解决ASP.NET Core MVC Razor小记所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。