簡體   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