1

我的 html 帮助程序类中有一个扩展方法来呈现自动完成。这适用于 VS2008 和 VS2010 中的 aspx 视图引擎。Autocomplete 类有一个重载的 ToString() 方法,它输出 Raw Html。

但是,当我使用 Razor 引擎时,我没有得到任何可见的输出。Firebug 显示扩展方法的输出是 Html 编码如下:(所有 <, >..)

    &lt;input class="AutoComplete" id="p_ename" name="p_ename" style="width: 190px" type="text" valuefield="p_empid"&gt;&lt;/input&gt; &lt;input id="p_empid" name="p_empid" type="hidden"&gt;&lt;/input&gt; 
&lt;script type='text/javascript'&gt;$('#p_ename').autocomplete('/UserMst/GetEmployee', { dataType: 'json', scroll: true, parse: function(item, event) { $('#p_empid').val(''); var array = new Array(); if(item) for (var i = 0; item[i]; i++ ) { array[array.length] = { data: item[i], value: item[i], result: unescape(item[i].Text) }; } return array; }, formatItem: function(row) { return unescape(row.Text); } }).result(function(event, item, formatted) { $('#p_empid').val(item.Value); }).keyup(function() { if (window.event.keyCode != 13 &amp;&amp; window.event.keyCode != 16 &amp;&amp; window.event.keyCode != 20 &amp;&amp; window.event.keyCode != 9 &amp;&amp; window.event.keyCode != 27 &amp;&amp; !(window.event.keyCode &gt;= 112 &amp;&amp; window.event.keyCode &lt;= 123) &amp;&amp; !(window.event.keyCode &gt;= 37 &amp;&amp; window.event.keyCode &lt;= 40)) { $('#p_empid').val(''); } });
&lt;/script&gt;

这就是我调用该方法的方式:

@Html.AutocompleteFor(m => m.p_empid, m => m.p_ename)
.setUrl(VirtualPathUtility.ToAbsolute("~/UserMst/GetEmployee"))
.setClass("AutoComplete").setStyle("width: 190px")

如何解决此问题以在 MVC3 中与 Razor 一起使用?

谢谢

4

2 回答 2

3

确保MvcHtmlString使用以下方法返回:

public static MvcHtmlString HiText(this HtmlHelper obj) {
   string code = "<p>hi</p>";
   return MvcHtmlString.Create(code);
}
于 2013-04-17T13:03:44.627 回答
0

好的 !这就是我现在让它工作的方式。不知道这是否是一个好的解决方案。在此处为面临相同问题的其他人发布修复程序。

我将ToString()覆盖方法重命名为MvcHtmlString ToHtml()并返回MvcHtmlString.Create(result.ToString())而不是原始 html 作为字符串。

现在我必须把它称为

@Html.AutocompleteFor(m => m.p_empid, m => m.p_ename)
.setUrl(VirtualPathUtility.ToAbsolute("~/UserMst/GetEmployee"))
.setClass("AutoComplete").setStyle("width: 190px").ToHtml()

Razor 现在可以正确渲染它。

于 2013-04-17T13:34:44.910 回答