HtmlDecode不能使用Viewbag和selectlist在html属性中使用Razor MVC

时间:2014-11-14 06:59:01

标签: jquery asp.net-mvc asp.net-mvc-4 razor

我有一个包含一些文档列表的Viewbag,列表中的一个文档名称为" test1> test2"。我的html语法看起来像

@Html.DropDownList("Documents", (SelectList)ViewBag.Documents, "--Select Document--", new { @class = "selectField" }) 

当它在浏览器中打开时,下拉列表会显示文档名称" test1> test2"显示为" test2& gttest1"(在& gt之后具有semicolan)。我如何显示名称" test1> test2"取代" test2& gttest1"?

修改

当我详细检查它时,问题不在于我的剃刀语法,而是使用jquery来绑定我的下拉列表uisng" test1> test2"值。我的jquery看起来如下。

 jq("#Documents" + "> option").remove();
 jq("#Documents").append(jq("<option />").val('@ViewBag.DraftDocId').text('@ViewBag.DraftDocTitle'));

这里ViewBag.DraftDocTitle是&#34; test1&gt; test2&#34;值

2 个答案:

答案 0 :(得分:1)

您可以将 HTMLDecode 应用于已编码的字符串。请参阅以下代码示例以绑定您的下拉列表:

@Html.DropDownList("Documents", ((SelectList)ViewBag.Documents).Select(i => { i.Text = HttpUtility.HtmlDecode(i.Text); return i; }), "--Select Document--", new { @class = "selectField" })

更新:使用JQuery

jq("#Documents" + "> option").remove();
jq("#Documents").append(jq("<option />").val('@ViewBag.DraftDocId').text('@HttpUtility.HtmlDecode(ViewBag.DraftDocTitle)'));

答案 1 :(得分:0)

请在您的问题的控制器部分添加创建ViewBag.Documents的代码。由于我已经尝试过,以下代码块一切正常,

控制器中的

        List<string> elements = new List<string>();
        elements.Add("test1>test2");
        SelectList selectList = new SelectList(elements);
        ViewBag.Documents = selectList;

在视图中

 @Html.DropDownList("Documents", (SelectList)ViewBag.Documents, "--Select Document--", new { @class = "selectField" }) 

可能你是通过一些计算创建元素列表。我觉得有些不对劲。