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)));
        }
复制代码

 

posted @   冰魄少年  阅读(401)  评论(2编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示