用作 JavaScript 字符串的 Razor 声明性帮助程序
Razor declarative helper used as javascript string
假设我有一个助手,例如:
@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))
}
相关文章:
- {{#each}}内部的Handlebar帮助程序
- Handlebars帮助程序未获取变量的值
- Node Express Handlebars帮助程序未返回函数的结果
- 如何让应用程序帮助程序方法在发送的请求为 JS 格式时工作
- 从帮助程序异步返回值
- 无法使用模板帮助程序设置正文类
- 在呈现模板之前调用帮助程序
- 花式框 V2 按钮帮助程序冲突
- 在帮助程序处获取对象值的车把,无需使用数据进行编译
- {{outlet}}、{{yield}、}{render}和{{partial}的ember帮助程序之间存在差异
- 模板帮助程序在session.set之后未更新
- 引导程序窗体帮助程序-状态选择器-选择类
- 如何在HTMLBars中编写帮助程序
- 使用自定义断言帮助程序对cli扩展assert进行ember-cli扩展
- 引导窗体帮助程序选择框
- 在模板帮助程序中连接两个查询的结果
- 将字符串中的URL替换为包含匹配URL的HTML字符串的Handlebar帮助程序
- 在Handlebars.js中查询块帮助程序
- 使用帮助程序中使用的模态传递轨道变量link_to
- 用作 JavaScript 字符串的 Razor 声明性帮助程序