使用Javascript的Razor
if块内部的代码是Javascript,但正如我所预料的,Razor将var url和var arg视为.NET变量 我知道我可以使用Html.Raw,但是有没有其他更好的解决方案来解决这个问题,因为我相信Html.Raw会破坏可读性您可以使用使用Javascript的Razor,javascript,asp.net-mvc,razor,Javascript,Asp.net Mvc,Razor,if块内部的代码是Javascript,但正如我所预料的,Razor将var url和var arg视为.NET变量 我知道我可以使用Html.Raw,但是有没有其他更好的解决方案来解决这个问题,因为我相信Html.Raw会破坏可读性您可以使用元素告诉Razor,if中的代码应该被视为“文本”而不是c代码: 您需要将块的内容包装在标记中,以强制Razor将其视为标记,而不是服务器端代码 然而,编写服务器生成的Javascript代码通常是个坏主意;这是相当不可读的,很容易使XSS洞 相反,您应该
元素告诉Razor,if
中的代码应该被视为“文本”而不是c代码:
您需要将块的内容包装在
标记中,以强制Razor将其视为标记,而不是服务器端代码
然而,编写服务器生成的Javascript代码通常是个坏主意;这是相当不可读的,很容易使XSS洞
相反,您应该将服务器端代码存储在
数据-
属性中,并在普通JS代码中读取它们。谢谢您的回答,似乎是最好的选择。我不确定JS和c的这种混合是否是好的解决方案。我认为最好先从c#中初始化一些js变量,然后在js中进行CNEDITION,或者使用data-attribute将数据传递给js。一般来说,将js与c#(razor)代码分开。有人同意吗?@py3r3str事实上你是对的,因为这是一个业务逻辑,必须在控制器上完成,但是我正在更新此代码,就像以前一样,所以我没有机会改变我正在做的方式
@if (Model.PaymentMethodTypeId == (int) PaymentMethodType.PayPal)
{
var url = @MyLibraryHtml.JavascriptEncodeUrl(Url.RewriteAction("SaveNewPaymentMethod", "PaymentMethods"));
var args = form.serialize();
@Html.Raw(" var url = ")
}
@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();
}