Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript的Razor_Javascript_Asp.net Mvc_Razor - Fatal编程技术网

使用Javascript的Razor

使用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洞 相反,您应该

if块内部的代码是Javascript,但正如我所预料的,Razor将var url和var arg视为.NET变量

我知道我可以使用Html.Raw,但是有没有其他更好的解决方案来解决这个问题,因为我相信Html.Raw会破坏可读性

您可以使用
元素告诉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();
 }