Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 不带编码的ASP.NET MVC Razor呈现选择列表_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 3 不带编码的ASP.NET MVC Razor呈现选择列表

Asp.net mvc 3 不带编码的ASP.NET MVC Razor呈现选择列表,asp.net-mvc-3,Asp.net Mvc 3,如何在没有HTML编码的情况下获得要呈现的选择列表 @{ var noiceList = new SelectList(new[] { new {ID = "", Name = ""}, new {ID = "y", Name = "Yes   after3Space"}, "ID", "Name"); } @Html.D

如何在没有HTML编码的情况下获得要呈现的选择列表

@{
    var noiceList = new SelectList(new[] { new {ID = "", Name = ""}, 
                                   new {ID = "y", Name = "Yes   after3Space"}, 
                 "ID", "Name"); 
 }
 @Html.DropDownList("noice", @noiceList )
渲染

..
<option value="y">Yes&amp;nbsp;&amp;nbsp;&amp;nbsp;3Space</option>
...
。。
是及;nbsp&;nbsp&;nbsp;3空间
...
如何让它改为渲染

<option value="y">Yes&nbsp;&nbsp;&nbsp;after3Space</option>
Yes在3space之后

这是因为Razor总是输出实体编码的html。在此上下文中,您应该能够调用(VS正在我的机器上更新,因此我无法进行快速测试)
Html.Raw()
,如下所示:

var noiceList = new SelectList(new[] { new {ID = "", Name = ""}, 
                               new {ID = "y", Name = Html.Raw("Yes&nbsp;&nbsp;&nbsp;after3Space")}, 
             "ID", "Name");

编辑:这不起作用。

不幸的是,此行为不是内置的。
Html.DropDownList
方法(以及大多数其他
HtmlHelper
方法)总是转义所有输入文本

变通办法 不过,还有一些变通办法。例如,您可以创建自己的HtmlHelper方法,该方法允许未经扫描的HTML

但是,如果您的需求像您的示例一样简单,那么这里有一个简单的解决方法:
使用占位符,如
|
,然后将其替换为
,如下所示:

@{
    var noiceList = new SelectList(new[] { new {ID = "", Name = ""}, 
                                   new {ID = "y", Name = "Yes|||after3Space"}, 
                 "ID", "Name"); 
 }
 @Html.Raw(Html.DropDownList("noice", @noiceList).ToString().Replace("|", "&nbsp;"))
注意,您还可以创建一个简单的扩展方法来真正减少所需的代码量:

 public static HtmlString Replace(this HtmlString input, string findAll, string replaceWith) {
    return new HtmlString(input.ToString().Replace(findAll, replaceWith));
 }
这将Html代码简化为:

 @Html.DropDownList("noice", @noiceList).Replace("|", "&nbsp;")

在C语言中实现这一点的最简单方法是使用
\xA0
而不是
,这样可以避免所有额外的代码


这个答案值得称赞:

为什么不直接使用HTML-
是&;nbsp&;nbsp&;nbsp;3空间
可能的重复不幸的是,
SelectList
生成了一个
SelectList项
s的列表,它使用常规的
字符串
表示
名称
。所以,这是行不通的:(是的,现在我想起来了,它不起作用。就像我说的,我无法测试它,因为VS当时正在更新。我一直在想,未来的MVC版本是否会包括对嵌套HTML的支持,比如说,
SelectListItem.Name
可能是一个
HtmlString
?但是,我不认为这是一个“漂亮的选择”解决方案,因为它应该只用于简单的标记。