假设我有一个帮手,例如:
@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方法中调用时不返回换行符?
答案 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))
}