当前位置:首页 > 编程教程 > asp.net教程 > Asp.net MVC4高级编程学习笔记-视图学习第二课Razor视图引擎20171010

Asp.net MVC4高级编程学习笔记-视图学习第二课Razor视图引擎20171010

2017-10-12 19:45:38[asp.net教程]点击数:作者:未知 来源: 网络
随机为您推荐的文章:18 C#中的循环执行 for循环

这篇文章为您讲述18 C#中的循环执行 for循环的相关介绍,具体代码请看下文 在这一节练习中,我们向大家介绍一下C#中的另一种重要的循环语句,for循环。 for(表达式1;表达式2;表达

此篇文章将要介绍Asp.net MVC4高级编程学习笔记-视图学习第二课Razor视图引擎20171010的相关介绍,具体实例请看下文

Razor视图引擎 1、常用写法

@标记代码的转换字符。

示例:

<h1>hello,it’s @users.count items.</h1> //这里会自动识别@users.count为代码块,用空格识别;

@{

String rootNameSpace=”MyApp”;

}

//////////////////////////////////////////////////////////////////

<span> @(rootNameSpace).Models</span>

//这里需要加括号,如果不加括号会识别.后面的Models为rootNameSpace的属性这样会报错。

/////////////////////////////////////////////////////////////////////////

一般电子邮件格式会自动识出来格式,为了防止歧义建议用@@来转义显示电子邮件中的@符号。如:abc@@126.com

如果有类似电子邮件的格式需要转换代码,如下需要增加括号来识别,比如:

<li>Item_@(item.length)</li> //如果去掉括号会当成电子邮件格式连代码一块输出来。

///////////////////////////////////////////////////////////////////////////

@foreach(item in items)

{

<li> The item is @item.</li> //这里会识别到.后面为<符号,不能组成有效的表达式,因此只会自动识别为@item。这个功能比较好。

}

/////////////////////////////////////////////////////////

如果语句中@符号,如微信中的@某个人,可以使用@@符号转义输出。如:

@@吴京,@@小s

2、 HTML编码

默认情况下Razor会自动编码,如:

@{

string message=”<script>alert(‘hello!’)</script>”

}

<span>@message</span>

这里在执行时不会弹出警告框,而会输出如下内容:

<span>&lt;script&gt;alert(&#39;alert&#39; &lt;/script&gt;</span>。

/////////////////////////////////////////////////////////////////////////

如果想显示Html标签到页面中,通过两种方式

1) 创建一个HtmlString 、mvcHtmlString实例或者直接调用mvcHtmlString.Create方法创建

Example:

@(new HtmlString("<script>alert('123')</script>")) //会弹出网页对话框123

@(new MvcHtmlString("<script>alert('123')</script>"))//会弹出网页对话框123

@MvcHtmlString.Create("<script>alert('123')</script>")//会弹出网页对话框123

2) 使用Html.Raw方法

@Html.Raw("<script>alert('123')</script>") //会弹出网页对话框123

思考:这里什么把Html标签打印显示到页面上,而不是弹出对话框,但又不能像默认那样出现转码符号&lt,&gt;,如有人知道还请告知,谢谢!

以上这种Razor自动编码对于javascript脚本中来显示用户输出的信息来说安全性还是不够,如果用户信息参数中存在编码后的脚本标签还是可以攻击,因此在脚本中需要使用javascript编码而不仅仅是Html编码。需要使用@Ajax.JavaScriptStringEncode对用户输出信息进行编码。

Example:--这里注意我在Razor视图写的这一句好像没有执行js代码,页面预览效果还是显示Test,不知道有人知道在View中这样写存在的问题,提供下正确的解决方法,谢谢!

<div id="message">Test</div>

<script type="text/javascript">

$(function () {

var message = 'Hello,@Ajax.JavaScriptStringEncode(ViewBag.UserName)';

$("#message").html(message).show('slow');

});

</script>

--找到一种解决方案:

在_Layout.cshtml通用视图中添加节点@RenderSection("scripts", required: false),然后在渲染的视图如下书写就可以正常执行js代码了,初步判断应该是页面加载先后顺序问题。

示例代码:

@section scripts
{
<script type="text/javascript">

$(function () {
var message = 'Hello,@Ajax.JavaScriptStringEncode(ViewBag.UserName)';
$("#message").html(message).show('slow');
});
</script>
}

/////////////////////////////////////////////////////////////////////////////////////

Razor支持代码块。

Example:

@foreach(var item in stuff)

{

<li>the item name is @item.</li>

}

这个代码块自动识别htrml内容,到右边的}号结束。

写成一行也可以识别,如:

@foreach (var item in stuff){ <li>the item name is @item.</li>}

多行代码块Example:

@{

string strName = "XiaoHua";

ViewBag.Title = "用户信息";

}

当调用没有反回值的方法值时,需要使用代码块。

Example:

@{Html.RenderPartial("AboutView");} //如果这里去掉花括号是报错的,提示void转为object。

/////////////////////////////////////////////////////////////////////////////////////

Razor混合代码和纯文本两种方式。

@if(showMessage)

{

<text>This is plain text.</text> //可以多行使用

}

@*或者*@

@if(showMessage)

{

@:This is plain text. //不过这里只能写一行文本,不能换行。

}

/////////////////////////////////////////////////////////////////////////////////////

Razor输出转义符号@。

使用&#64或者两个@@符号转义输出@符号。

/////////////////////////////////////////////////////////////////////////////////////

Razor注释。

使用@* 注释内容 *@格式在视图文件中添加注释。

/////////////////////////////////////////////////////////////////////////////////////

Razor使用泛形方法需要整个代码使用圆括号括起来。

Example:

@(Html.someMethod<AType>())

后续视图布局单独再写一个学习笔记。

这些内容可能对你也有帮助

更多asp.net教程可查看asp.net教程列表页。