zoukankan      html  css  js  c++  java
  • RazorHelper.cs

    完整版 RazorHelper.cs

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web;
    using RazorEngine;
    using RazorEngine.Text;
    
    namespace Console_Core.Common
    {
        public class RazorHelper
        {
            /// <summary>
            /// Razor解析cshtml页面,并输出到浏览器
            /// </summary>
            /// <param name="context">上下文</param>
            /// <param name="cshtmlVirtualPath">cshtml页面的虚拟路径</param>
            /// <param name="data">传递的虚拟实例</param>
            public static void RazorParse(HttpContext context, string cshtmlVirtualPath, object data)
            {
                string fullPath = context.Server.MapPath(cshtmlVirtualPath);
                string cshtml = File.ReadAllText(fullPath);
                string cacheName = fullPath + File.GetLastWriteTime(fullPath);
                string html = Razor.Parse(cshtml, data, cacheName);
                context.Response.Write(html);
            }
    
            /// <summary>
            /// 对html进行加密
            /// </summary>
            /// <param name="htmlStr">html标签</param>
            /// <returns>加密之后的字符串</returns>
            public static HtmlEncodedString HtmlEncodedString(string htmlStr)
            {
                return new HtmlEncodedString(htmlStr);
            }
    
            /// <summary>
            /// 对html原样显示
            /// </summary>
            /// <param name="htmlStr">html标签</param>
            /// <returns>html原来样子</returns>
            public static RawString RawString(string htmlStr)
            {
                return new RawString(htmlStr);
            }
    
            /// <summary>
            /// 拼接生成CheckBox 标签
            /// </summary>
            /// <param name="isCheck">是否选中</param>
            /// <param name="extendProperties">扩展属性的对象:比如,new {id='managerId',name='manager',style='color:red' }</param>
            /// <returns>CheckBox标签</returns>
            public static RawString CheckBox(bool isCheck, object extendProperties)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("<input type='checkbox' ");
                sb.Append(RenderExtProperties(extendProperties));
                if(isCheck)
                {
                    sb.Append(" checked ");
                }
                sb.AppendLine(" />");
                return new RawString(sb.ToString());
            }
    
            /// <summary>
            /// 拼接扩展属性 及对应的值
            /// </summary>
            /// <param name="extendProperties">扩展属性 所在的匿名实例</param>
            /// <returns>拼接生成的 包含属性名和值 的字符串: 比如,“ name='manager' id='managerId' ” </returns>
            private static string RenderExtProperties(object extendProperties)
            {
                StringBuilder sb = new StringBuilder();
                #region 拼接扩展属性
                Type extType = extendProperties.GetType();
                PropertyInfo[] props = extType.GetProperties();
                foreach (PropertyInfo prop in props)
                {
                    string extPropName = prop.Name;
                    object extPropValue = prop.GetValue(extendProperties);
                    sb.Append(" ").Append(extPropName).Append("='").Append(extPropValue).Append("' ");
                }
                #endregion
                return sb.ToString();
            }
    
            /// <summary>
            /// 拼接生成DropDownList下拉列表 标签
            /// </summary>
            /// <param name="list">实例的集合</param>
            /// <param name="valuePropName">实际的值属性的名称:比如,Id</param>
            /// <param name="textPropName">显示的文本属性的名称:比如,Name</param>
            /// <param name="selectedValue">选中的值</param>
            /// <param name="extendProperties">扩展属性的对象:比如,new {id='managerId',name='manager',style='color:red' }</param>
            /// <returns>DropDownList下拉列表 标签</returns>
            public static RawString DropDownList(IEnumerable list,string valuePropName,string textPropName,object selectedValue,object extendProperties)
            { 
                //<select name='' id='' >
                //<option value=''> </option> 
                //</select>
                StringBuilder sb = new StringBuilder();
                sb.Append("<select ");
                #region 拼接扩展属性
                sb.Append(RenderExtProperties(extendProperties));
                #endregion
                sb.AppendLine(" >");
                #region 拼接下拉选项
                foreach (object item in list)
                {
                    object valuePropValue, textPropValue;
                    GetvalueAndTextPropValue(item, valuePropName, textPropName, out valuePropValue, out textPropValue);
                    sb.Append("<option value='").Append(valuePropValue).Append("' ");
                    if(object.Equals(valuePropValue,selectedValue)) //如果当前值与选中的值相等,则selected (引用类型用equal,如果用=则是不同的实例,因为发生过装箱)
                    {
                        sb.Append(" selected ");
                    }
                    sb.Append(">").Append(textPropValue).AppendLine(" </option> ");
                } 
                #endregion
                sb.AppendLine("</select>");
                return new RawString(sb.ToString());
            }
    
            /// <summary>
            /// 拼接生成RadioButtonList 标签
            /// </summary>
            /// <param name="list">实例的集合</param>
            /// <param name="valuePropName">实际的值属性的名称:比如,Id</param>
            /// <param name="textPropName">显示的文本属性的名称:比如,Name</param>
            /// <param name="selectedValue">选中的值</param>
            // <param name="extendProperties">扩展属性的对象:比如,new {name='gender',style='color:red' }</param>
            /// <returns>RadioButtonList 标签</returns>
            public static RawString RadioButtonList(IEnumerable list, string valuePropName, string textPropName, object selectedValue, object extendProperties)
            {
                //<input type="radio" name="gender" value="1" checked /><label>男</label><br />  //只能单选
                StringBuilder sb = new StringBuilder();
                foreach(object item in list)
                {
                    object valuePropValue, textPropValue;
                    GetvalueAndTextPropValue(item, valuePropName, textPropName, out valuePropValue, out textPropValue);
                    sb.Append("<input type="radio" ");
                    sb.Append(RenderExtProperties(extendProperties));
                    sb.Append(" value="").Append(valuePropValue).Append(""");
                    if(object.Equals(valuePropValue,selectedValue))
                    {
                        sb.Append(" checked ");
                    }
                    sb.Append(" /><label>").Append(textPropValue).AppendLine("</label><br />");
                }
                return new RawString(sb.ToString());
            }
    
            /// <summary>
            /// 拼接生成CheckBoxList 标签
            /// </summary>
            /// <param name="list">实例的集合</param>
            /// <param name="valuePropName">实际的值属性的名称:比如,Id</param>
            /// <param name="textPropName">显示的文本属性的名称:比如,Name</param>
            /// <param name="selectedValues">选中的值的数组</param>
            /// <param name="extendProperties">扩展属性的对象:比如,new {name='hobby',style='color:red' }</param>
            /// <returns>CheckBoxList 标签</returns>
            public static RawString CheckBoxList(IEnumerable list, string valuePropName, string textPropName, object[] selectedValues, object extendProperties)
            {
                //<input type="checkbox" name="hobby" value="1" checked /><label>足球</label><br />   //可多选
                StringBuilder sb = new StringBuilder();
                foreach(object item in list)
                {
                    object valuePropValue,textPropValue;
                    GetvalueAndTextPropValue(item, valuePropName, textPropName, out valuePropValue, out textPropValue);
                    sb.Append("<input type="checkbox" ");
                    sb.Append(RenderExtProperties(extendProperties));
                    sb.Append (" value="").Append(valuePropValue).Append("" ");
                    if(selectedValues.Contains(valuePropValue))
                    {
                        sb.Append(" checked ");
                    }
                    sb.Append(" /><label>").Append(textPropValue).AppendLine("</label><br />");
                }
                return new RawString(sb.ToString());
            }
    
            /// <summary>
            /// 根据指定实例的 值属性名和文本属性名 获得 值属性值和文本属性值
            /// </summary>
            /// <param name="item">指定实例</param>
            /// <param name="valuePropName">值属性名</param>
            /// <param name="textPropName">文本属性名</param>
            /// <param name="valuePropValue">out 值属性值</param>
            /// <param name="textPropValue">out 文本属性值</param>
            private static void GetvalueAndTextPropValue(object item, string valuePropName, string textPropName, out object valuePropValue, out object textPropValue)
            {
                Type type = item.GetType();
                PropertyInfo valueProp = type.GetProperty(valuePropName);
                valuePropValue = valueProp.GetValue(item);
                PropertyInfo textProp = type.GetProperty(textPropName);
                textPropValue = textProp.GetValue(item);
            }
        }
    }
    RazorHelper.cs
  • 相关阅读:
    Asp.net2.0 中自定义过滤器对Response内容进行处理 dodo
    自动化测试工具 dodo
    TestDriven.NET 2.0——单元测试的好助手(转) dodo
    JS弹出窗口的运用与技巧 dodo
    ElasticSearch 简介 规格严格
    修改PostgreSQL字段长度导致cached plan must not change result type错误 规格严格
    Linux系统更改时区(转) 规格严格
    mvn编译“Cannot find matching toolchain definitions for the following toolchain types“报错解决方法 规格严格
    ElasticSearch 集群 & 数据备份 & 优化 规格严格
    Elasticsearch黑鸟教程22:索引模板的详细介绍 规格严格
  • 原文地址:https://www.cnblogs.com/adolphyang/p/4811400.html
Copyright © 2011-2022 走看看