中Model为服务器程序处理后传递给模板的对象。
@{}中为C#代码,C#代码可以和html代码混排
使用方法:
1,新建一般处理程序,
2,通过context.server.MapPath()方法,取得.cshtml文件的路径
3,使用File.ReadAllText()方法,读取.cshtml文件的内容
4,调用Razor.Parse()方法进行.cshtml文件的动态编译,//Razor.Parse(cshtml,model,"编译的程序集名字"),这样可以避免重复编译,减轻服务器负担
5,使用context.Response.Write()方法将编译后的.cshtml文件输出
注意:
浏览器端是查看.ashx文件
示例代码:
string fullPath = context.server.MapPath("~/RazorDemo/Razor1.cshtml");
string cshtml = File.ReadAllText(fullPath);
string html = Razor.parse(cshtml);
context.Response.Write(html);
三十九、Razor调用外部方法
编写一个静态方法,方法返回RawString类型,在.cshtml文件中就可以调用方法进行原样输出
在CSHTML中@表达式后面输出的会自动进行HttpEncodedString
HttpEncodedString 进行Http编码后输出
RawString 进行原样输出
四十、Razor使用常见问题
1,“无法确定使用哪一版本的ASP.NET Web Pages”
在web.config文件<configuration>节点下添加
<appSettings>
<add key="webPages:Version" value="2.0"/>
</appSettings>
2,model如果传递对象的时候,如果只是传递普通的匿名类对象还可以(ASP.NET MVC 中都不可以)
如果传递集合就不可以,因为匿名类是internal的。最好传递命名对象。
如果非要传递匿名对象,可以使用newton.json(json.net)最新版9,先序列化为json,再反序列化为dynamic对象
注意:
取的对象不是原始数据类型了,因此要用foreach遍历,且不能显示转换,
cshtml使用的时候都用dynamic,cshtml页面顶部要加上@model dynamic(注意大小写)
示例代码:
//序列化方法:
static dynamic ToDynamic(object obj)
{
string json = JsonConvert.SerializeObject(obj);
dynamic dyObj = JsonConvert.DeserializeObject(json);
return dyObj;
}
3,关于在VS2015中使用的说明
需要适合2015版本的Razor模板引擎,会出现错误