1

オートコンプリートをレンダリングするために、html ヘルパー クラスに Extension メソッドがあります。これは、VS2008 および VS2010 の aspx ビュー エンジンで正常に動作します。Autocomplete クラスには、Raw Html を出力するオーバーロードされた ToString() メソッドがあります。

ただし、Razor エンジンを使用すると、目に見える出力が得られません。Firebug は、Extension メソッドの出力が次のようにエンコードされた 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

Ok !これが私が今のところ動作するようになった方法です。それが良い解決策であるかどうかはわかりません。同じ問題に直面している他の人のために、ここに修正を投稿してください。

ToString()オーバーライド メソッドの名前を に変更し、生の html の代わりに文字列としてMvcHtmlString ToHtml()返しました。MvcHtmlString.Create(result.ToString())

今、私はそれを

@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 に答える