[英]Razor with Javascript
@if (Model.PaymentMethodTypeId == (int) PaymentMethodType.PayPal)
{
var url = @MyLibraryHtml.JavascriptEncodeUrl(Url.RewriteAction("SaveNewPaymentMethod", "PaymentMethods"));
var args = form.serialize();
@Html.Raw(" var url = ")
}
在if块内部,代码是Javascript,但正如我所料,Razor将var url和var arg作为.NET变量。
我知道我可以使用Html.Raw,但是有没有其他更好的解决方案,因为我相信Html.Raw会破坏可读性
您可以使用<text></text>
元素告诉Razor, if
内的代码应被视为“文本”而不是c#代码:
@if (Model.PaymentMethodTypeId == (int) PaymentMethodType.PayPal)
{
<text>
var url = @MyLibraryHtml.JavascriptEncodeUrl(Url.RewriteAction("SaveNewPaymentMethod", "PaymentMethods"));
var args = form.serialize();
</text>
}
另外,如果只有几行,则可以使用@:
“转义”单行:
@if (Model.PaymentMethodTypeId == (int) PaymentMethodType.PayPal)
{
@:var url = @MyLibraryHtml.JavascriptEncodeUrl(Url.RewriteAction("SaveNewPaymentMethod", "PaymentMethods"));
@:var args = form.serialize();
}
您需要将块的内容包装在<text>
标记中,以强制Razor将其视为标记而不是服务器端代码。
但是,编写服务器生成的Javascript代码通常不是一个好主意。 这是相当难以理解的,并且很容易造成XSS漏洞。
相反,您应该将服务器端代码存储在data-
-attribute中,并以普通的JS代码读取它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.