什么可能导致ViewData [“x”]。ToString不起作用?

时间:2016-04-11 21:51:27

标签: javascript html asp.net-mvc razor

我想在MVC5应用程序上显示一个颜色选择器。如果手动输入并适用于使用它的每个页面,则此功能有效。显然,这是过度重复的代码,所以我创建了一个Utils方法来生成数据。以下是该方法的定义:

    public static string GetColorsList()
    {
        string colorsList = "<option style=\"color:gray\" value=\"null\">select color</option>" +
                            "<option style=\"color:azure\" value=\"Azure\">Azure</option>" +
                            "<option style=\"color:blue\" value=\"Blue\">Blue</option>" +
                            "<option style=\"color:cyan\" value=\"Cyan\">Cyan</option>" +
                            "<option style=\"color:green\" value=\"Green\">Green</option>" +
                            "<option style=\"color:magenta\" value=\"Magenta\">Magenta</option>" +
                            "<option style=\"color:orange\" value=\"Orange\">Orange</option>" +
                            "<option style=\"color:red\" value=\"Red\">Red</option>" +
                            "<option style=\"color:violet\" value=\"Violet\">Violet</option>" +
                            "<option style=\"color:yellow\" value=\"Yellow\">Yellow</option>";

        return colorsList;
    }

我返回字符串而不是IEnumerable的原因是JS方法使用以下方法向页面添加新数据(即在表中创建新行):

$(#tablename tbody).append(newcontent);

其中new content是要插入的HTML字符串。理想情况下,我可以创建一个Html.DropDownList来显示选择器内容,但这不会返回字符串友好的结果。

我想要完成的事情:将colorsList放入ViewData [“x”]中,将ViewData [“x”]转换为字符串,并将该字符串与属于的其他内容连接起来newcontent。

ViewData [“x”]。ToString()产生以下结果:

&lt;option style=&quot;color:gray&quot; value=&quot;null&quot;&gt;select 
color&lt;/option&gt;&lt;option style=&quot;color:azure&quot; value=&quot;
Azure&quot;&gt;Azure&lt;/option&gt;&lt;option style=
&quot;color:blue&quot; 
value=&quot;Blue&quot;&gt;Blue&lt;/option&gt;&lt;option style=&quot;
color:cyan&quot; value=&quot;Cyan&quot;&gt;Cyan&lt;/option&gt;&lt;
option style=&quot;color:green&quot; value=&quot;Green&quot;&gt;
Green&lt;/option&gt;&lt;option style=&quot;color:magenta&quot; value=
&quot;Magenta&quot;&gt;Magenta&lt;/option&gt;&lt;option style=
&quot;color:orange&quot; value=&quot;Orange&quot;&gt;Orange&lt;/option
&gt;&lt;option style=&quot;color:red&quot; value=&quot;Red&quot;&gt;
Red&lt;/option&gt;&lt;option style=&quot;color:violet&quot; value=
&quot;Violet&quot;&gt;Violet&lt;/option&gt;&lt;option style=
&quot;color:yellow&quot; value=&quot;Yellow&quot;&gt;Yellow&lt;/option&gt;);

此处的解决方法是运行:

        colorpickerContent = colorpickerContent.replace("$lt;", "<");
        colorpickerContent = colorpickerContent.replace("$gt;", ">");
        colorpickerContent = colorpickerContent.replace("&quot;", "\"");

这样所有正确的角色都存在。运行时,程序会抛出语法错误,因为输出不是以将其视为字符串所需的引号开头的。关于如何使ViewData [“x”]成为可行字符串的任何建议?我尝试了JSON.stringify(),但发现了类似的结果。

1 个答案:

答案 0 :(得分:1)

您正在寻找不会被转义的HtmlString