zoukankan      html  css  js  c++  java
  • MvcHtmlString解决MVC中从后台返回HTML代码被编码问题

    • (1) 要得到的效果

    <a class="easyui-linkbutton" data-options="iconCls:'icon-add'" id="dgRowAdd" plain="true">新增行</a>

    • (2)  属性内编码被转换

    <a class="easyui-linkbutton" data-options="iconCls:&#39;icon-add&#39;" id="dgRowAdd" plain="true">新增行</a>

    • (3)  全部被转换

    &lt;a class=&quot;easyui-linkbutton&quot; data-options=&quot;iconCls:&amp;#39;icon-add&amp;#39;&quot; id=&quot;dgRowAdd&quot; plain=&quot;true&quot;&gt;新增行&lt;/a&gt;

    (2) (3)都不是我要的结果

    因此我找了些资料,统和了下,最终转换的时候在最后代码输出的时候将HTML转换一下 HttpUtility.HtmlDecode

            /// <summary>
            /// DataGrid
            /// Toolbar
            /// </summary>
            /// <param name="helper"></param>
            /// <param name="id"></param>
            /// <param name="text"></param>
            /// <param name=""></param>
            /// <param name="token"></param>
            /// <param name="role"></param>
            /// <param name="htmlAttributes"></param>
            /// <returns></returns>
            public static MvcHtmlString ToolbarFor(this HtmlHelper helper, string id, string text, string css, dynamic htmlAttributes)
            {
                var builder = new TagBuilder("a");            
                builder.IdAttributeDotReplacement = "-";
                builder.GenerateId(id);
                var dic = new RouteValueDictionary(htmlAttributes);
                Dictionary<string, object> dicAttrs = new Dictionary<string, object>();
                string token = string.Empty;
                string role = string.Empty;
                foreach (var item in dic)
                {
                    switch (item.Key)
                    {
                        case "options":
                            dicAttrs.Add("data-options", item.Value);
                            break;
                        case "token":
                            token = Convert.ToString(item.Value);
                            break;
                        case "role":
                            role = Convert.ToString(item.Value);
                            break;
                        default:
                            dicAttrs.Add(item.Key, item.Value);
                            break;
                    }
                }
                if (!string.IsNullOrEmpty(token))
                {
                    if (string.IsNullOrEmpty(role))
                    {
                        return MvcHtmlString.Create("");
                    }
                    if (MasterPermissionAuthorizeAttribute.HasRoles(token, role)==false)
                    {
                        return MvcHtmlString.Create("");
                    }
                }
                //添加属性
                builder.MergeAttributes(dicAttrs);
    
                //添加样式
                builder.AddCssClass(css);            
                builder.SetInnerText(text);
    
                //输出控件
                return MvcHtmlString.Create(HttpUtility.HtmlDecode(builder.ToString(TagRenderMode.Normal)));
            }
  • 相关阅读:
    socket.io+angular.js+express.js做个聊天应用(二)
    [原创]Python通过Thrift连接HBase
    [原创]安装Sqoop并验证
    使用PostgreSQL、Hibernate 构建 NoSQL
    [原创]HBase客户端开发举例(第三部分)
    [原创]HBase客户端开发举例(第二部…
    [原创]全分布模式下Hadoop安装
    Samba的基本配置
    常见设计模式举例 转载有改动
    【转载】hibernate中使用ehcache
  • 原文地址:https://www.cnblogs.com/xushaonian/p/8532113.html
Copyright © 2011-2022 走看看