【问题标题】:Razor declarative helper used as javascript stringRazor 声明性帮助器用作 javascript 字符串
【发布时间】:2011-07-29 16:06:21
【问题描述】:

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

@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 方法中调用时,有没有办法阻止助手返回换行符?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 冗长:(。为什么要这么冗长。
    • @Raynos:如果你愿意,你可以创建一个名称更短的助手来调用这个方法。
    【解决方案2】:

    你也可以使用AjaxHelper.JavaScriptStringEncode:

    @Ajax.JavaScriptStringEncode(value)
    

    或者声明一个 helper 让它更简洁:

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

    【讨论】:

      猜你喜欢
      • 2016-04-19
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      相关资源
      最近更新 更多