用作javascript字符串的Razor声明性助手

时间:2011-07-29 16:06:22

标签: javascript jquery asp.net-mvc-3 razor

假设我有一个帮手,例如:

@helper AddErrorSpan(string error)
{
    <span class="error">@error</span>
}

我遇到试图在javascript中调用帮助程序的问题。例如:

if ($('#YearTextBox').val() == "") 
{
        $('#ErrorDiv').append('@AddErrorSpan("Year field is required.")');
}

此操作失败并导致javascript语法错误,因为帮助程序在结尾处返回换行符。这会导致尾随');被推送到下一行,从而导致语法错误。我能做些什么来轻松解决这个问题吗?目前,简单的解决方案是制作这样的帮手。

@helper AddErrorSpan(string error)
{<span class="error">@error</span>}

由于在结束}之前没有中断,因此不会从帮助程序返回新行,并且没有javascript语法错误。这有点烦人,看起来很难看。有没有办法让佣人在我的javascript方法中调用时不返回换行符?

2 个答案:

答案 0 :(得分:4)

在调用帮助程序时,您需要通过调用HttpUtility.JavaScriptStringEncode来对字符串进行Javascript编码。

这会将换行符转义为\r\n,这将被HTML解析器无害地吞噬。

$('#ErrorDiv').append('@HttpUtility.JavaScriptStringEncode(AddErrorSpan("Year field is required.").ToString())');

答案 1 :(得分:1)

您还可以使用AjaxHelper.JavaScriptStringEncode

@Ajax.JavaScriptStringEncode(value)

或者宣布一个帮手使其更简洁:

@helper JsEncode(string value) {
    @(HttpUtility.JavaScriptStringEncode(value))
}