繁体   English   中英

剃刀与Javascript

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM