您的位置:首页 > 其它

Razor模板引擎 (RazorEngine)

2016-08-19 10:34 393 查看

Razor模板引擎不仅在ASP.NET MVC中内置了Razor模板引擎,还有一个开源的RazorEngine,

这样以来我们可以在非ASP.NET MVC项目中使用Razor引擎,甚至在控制台,WinForm项目中都可以使用。

 

 

文件的创建

文件是一个后缀名为cshtml的文件,如果在非MVC项目中创建Razor文件,可以新建一个html,把后缀名该为cshtml。

 

 

RazorEngine使用初体验

一、前台:

/// <summary>
/// 自己封装一个Razor.Parse()方法
/// </summary>
/// <param name="context">上下文对象</param>
/// <param name="cshtmlPath">.cshtml文件的相对路径</param>
/// <param name="obj">要传入的对象参数</param>
/// <returns>返回一个解析过的Razor模板字符串</returns>
private string RazorParse(HttpContext context, string cshtmlPath,params object[] obj)
{
//获得.cshtml文件的绝对路径
string path = context.Server.MapPath(cshtmlPath);
//通过路径将文件读成文本
string txt = File.ReadAllText(path);

//为模板准备一个缓冲,根据文件的修改时间动态组合
string cacheName = path + File.GetLastWriteTime(path);

//根据需求是否要传入对象参数,在调用Razor.Parse方法返回解析好的Razor模板
return obj.Length > 0 ? RazorEngine.Razor.Parse(txt, obj[0], cacheName) : RazorEngine.Razor.Parse(txt, cacheName);

}
View Code  

 

 

HtmlEncodeString()方法

在往模板传入字符串的格式,如果为html格式,该方法会将其转义,在模板显示字符串本身,而不会被模板解析为html标签

代码:

  public static HtmlEncodedString Test1()

        {

            return new HtmlEncodedString("<input type='text' />");

        }

 

 

 

RawString()方法

可以将类似于html的字符串,传入前台模板,可以被解析标签相应的含义

代码:

      public static RawString Test2()

        {

            return new RawString("<input type='text' />");

        }

 

 

 

Razor模板调用外部方法(在.cshtml模板页上调用在后台用C#写好的一个方法)

1.在.cshtml顶部引入方法的命名空间

@using 命名空间名称

2.调用

@类名.方法() ,不需要";"号。  如:@Handler1.Test1()

 

 

业务实例

通过外部方法生成一个Checked标签

public static RawString CreateChecked_input(string id,bool isChecked)

{

StringBuilder sb = new StringBuilder();

sb.Append("<input type='checkbox' id=" + id).Append("  checked="+ (isChecked==true?"checked":"")).Append(" />");

return new RawString(sb.ToString());

}

 

调用

@using Demo.Razor
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>

@Handler1.CreateChecked_input("t1", true)

</body>
</html>

 

总结:因为在后台很多数据时动态读取数据库的信息而组成的,将繁琐的拼接封装在后台,前台页面清晰,而封装的方法还可以重复利用到其他业务中

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: