繁体   English   中英

在JS-asp.net MVC中使用@ Url.Action

[英]Using @Url.Action in JS-asp.net MVC

我有一个正在创建的项目,并将其发布在IIS中,一切正常,我可以可视化我的Crystal Reports报表。

现在,我已经重新发布了该项目(IIS中的更新),但是看不到从js调用的Crystal Reports报告。

var url = "/ReporteIngresoVP/RPVistaPreviaIngreso";
window.open(url, "_blank"); 

在调用它时,它会打开一个新选项卡(应该是),并显示404:

在此处输入图片说明

当我打开另一个报告(从控制器)时,它向我显示了正确的path (所有来自IIS的path ):

在此处输入图片说明

正如我在这里读到的,如果我需要使用指向js中的asp.net MVC元素的URL,它们应该与@Url.Action一起使用,所以我尝试以下操作:

var url2='@Url.Action("RPVistaPreviaIngreso","CustomerReporteIngresoVP")';
window.open(url2, "_blank"); 

但是,当我导航时,我是通过以下方式获取网址的:

在此处输入图片说明

在两种情况下(Visual Studio和使用JavaScript发布的项目),我如何才能完成路线,还是可以转到视图/控制器?

UPDATE

我尝试从点击功能进行导航,但我从未传递任何网址,该如何修改?

$('.vpBTN').click(function () {

        //OTHER DATA
        $.ajax({
            url: "setDatosIngreso",
            method: "POST",
            data: {
                factura: datoFactura,
                poliza: datosPoliza,
                fecha: datosFecha,
                via: datosVia,
                bruto: datosBruto,
                neto: datosNeto,
                bultos: datosBultos
            },
            async: false,
            //dataType: "json",
            success: function (respuesta) {
                var url = "IKOR/ReporteIngresoVP/RPVistaPreviaIngreso";
                window.open(url2, "_blank"); 
            }
        });
    });

问题是您正在使用包含在Razor视图中的外部JS文件,并且显然您不能使用Razor HTML帮助器在JS文件中呈现完整的URL。 您需要改为将URL作为JS函数参数传递:

外部JS

// create this function to redirect
function redirectToUrl(url)
{
    window.open(url, "_blank"); 
}

剃刀视图( <script>标签)

$('.vpBTN').click(function () {
    // other data

    $.ajax({
       url: "setDatosIngreso",
       method: "POST",
       data: {
           factura: datoFactura,
           poliza: datosPoliza,
           fecha: datosFecha,
           via: datosVia,
           bruto: datosBruto,
           neto: datosNeto,
           bultos: datosBultos
       },
       success: function (respuesta) {
           var url = '@Url.Action("RPVistaPreviaIngreso","CustomerReporteIngresoVP")';
           redirectToUrl(url); 
       }
   });
});

我为解决该问题所做的工作并可以帮助某人:

最后,我将@Url.Action()发送给一个创建没有任何内容的div ,只包含一个clasdata-request-ur l

<div class="urlPasar" data-request-url="@Url.Action("RPVistaPreviaIngreso","ReporteIngresoVP")"></div>

在JS中捕获div data的值

var url = $('.urlPasar').data('request-url');
window.open(url, "_blank");

在Visual Studio和已发布项目中均适用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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