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

Ric*_*ick 5 javascript jquery razor asp.net-mvc-3

假设我有一个帮手,如:

@helper AddErrorSpan(string error)
{
    <span class="error">@error</span>
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

@helper AddErrorSpan(string error)
{<span class="error">@error</span>}
Run Code Online (Sandbox Code Playgroud)

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

SLa*_*aks 4

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

这会转义换行符 as \r\n,而换行符又会被 HTML 解析器无害地吞掉。

$('#ErrorDiv').append('@HttpUtility.JavaScriptStringEncode(AddErrorSpan("Year field is required.").ToString())');
Run Code Online (Sandbox Code Playgroud)