【问题标题】:Using @Url.Action in JS-asp.net MVC在 JS-asp.net MVC 中使用 @Url.Action
【发布时间】:2019-02-09 01:58:39
【问题描述】:

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

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

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

在调用它时,它会打开一个新标签(应该是这样)并向我显示 404:

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

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

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

但是当我导航时,我以这种方式获取 URL:

我怎样才能完成路线,或者在 Visual Studio 和使用 javascript 发布的项目这两种情况下,我可以转到视图/控制器吗?

更新

我尝试从点击功能导航,但我从未传递任何 url,我可以修改什么?

$('.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"); 
            }
        });
    });

【问题讨论】:

  • 该JS代码是否存储在外部文件中?听起来 Url.Action 助手没有在那里解析。请注意,您不能在外部脚本文件中使用 Razor 助手,您需要将其作为函数参数传递。
  • @TetsuyaYamamoto 是的,这是一个外部文件
  • 你是如何调用包含window.open的函数的?您能否提供一些详细信息,以便我可以通过使用函数参数来传递帮助程序结果来回答?如前所述,除非先将 URL 作为参数传递,否则您不能这样做。
  • @TetsuyaYamamoto 所有的动作都从点击功能开始,我做了一些事情,当这些事情完成后,我尝试导航到控制器/视图,最后一部分是ajax,我编辑包括这个的问题
  • AJAX 调用是否也存储在外部 JS 中?如果是真的,我建议将点击触发器移到 Razor <script> 标签中,然后调用包含 AJAX 和传递 URL 的函数。

标签: javascript c# asp.net asp.net-mvc


【解决方案1】:

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

外部 JS

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

Razor 视图(<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); 
       }
   });
});

【讨论】:

    【解决方案2】:

    我做了什么来解决它并可以帮助某人:

    创建一个什么都没有的div,最后一个class 和data-request-url 我发送我的@Url.Action()

    <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 和已发布的项目

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 2011-08-21
      • 2011-09-18
      • 2020-12-29
      • 2010-12-18
      • 2013-02-23
      • 2012-11-21
      相关资源
      最近更新 更多