用作 JavaScript 字符串的 Razor 声明性帮助程序

Razor declarative helper used as javascript string

本文关键字:声明 帮助程序 Razor JavaScript 字符串 用作      更新时间:2023-09-26

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

@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 方法中调用时返回换行符?

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

这将转义换行符作为'r'n,这反过来又会被HTML解析器无害地吞噬。

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

你也可以使用 AjaxHelper.JavaScriptStringEncode:

@Ajax.JavaScriptStringEncode(value)

或者声明一个帮助程序以使其更简洁:

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