Razor没有正确渲染HtmlHelper扩展方法

时间:2013-04-17 12:17:55

标签: asp.net-mvc-3 razor

我的html帮助器类中有一个Extension方法来渲染自动完成。这适用于VS2008中的aspx视图引擎& VS2010。 Autocomplete类有一个重载的ToString()方法,它输出Raw Html。

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

    <input class="AutoComplete" id="p_ename" name="p_ename" style="width: 190px" type="text" valuefield="p_empid"></input> <input id="p_empid" name="p_empid" type="hidden"></input> 
<script type='text/javascript'>$('#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 && window.event.keyCode != 16 && window.event.keyCode != 20 && window.event.keyCode != 9 && window.event.keyCode != 27 && !(window.event.keyCode >= 112 && window.event.keyCode <= 123) && !(window.event.keyCode >= 37 && window.event.keyCode <= 40)) { $('#p_empid').val(''); } });
</script>

这就是我称之为方法的方式:

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

我如何解决这个问题,以便在MVC3中使用Razor?

由于

2 个答案:

答案 0 :(得分:3)

确保使用以下内容返回MvcHtmlString

public static MvcHtmlString HiText(this HtmlHelper obj) {
   string code = "<p>hi</p>";
   return MvcHtmlString.Create(code);
}

答案 1 :(得分: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现在正确渲染它。