【问题标题】:absolute path on call ajax mvc4 c#调用ajax mvc4 c#的绝对路径
【发布时间】:2016-01-28 16:14:45
【问题描述】:

我在 mvc 4 实体框架中有一个项目,并使用 ajax 调用控制器方法。 我的问题是当我在本地使用我的应用程序时,url 是“控制器/方法”但是当我发布时我必须将 url 更改为“http://domain/appName/Controller/Method

我可以做些什么来获取 ajax url 上的绝对路径???我的 ajax 在 js 文件上,我不能使用像 html.actionlink 这样的函数

示例:

$("#btnAnswer").click(function () {

            $.ajax({

                url: "http://domain/appName/Controller/method/",
                //url: "/Controller/method/",
                data: { answer: $("#answer").val(), question_id: $("#question_id").val(), answer_id: $("#answer_id").val() },
                success: function (result) {
                    alert(result);

                }

            }).error(function () {

            }).fail(function () {

            });

    });

【问题讨论】:

    标签: c# ajax entity-framework asp.net-mvc-4 razor


    【解决方案1】:

    您并不需要绝对网址。正确的相对 url 很好。

    您应该使用Url.Action 辅助方法来为您的操作方法生成正确的相对路径。无论您当前的页面/视图如何,这都会生成正确的路径。

    url: "@Url.Action("ActionMethodName","YourControllerName")"
    

    Url.Action 如果您的 javascript 代码位于 razor 视图中,则辅助方法将起作用。但是,如果您的代码在外部 js 文件中,您应该使用 Url.Content("~") 辅助方法构建到您的应用程序根目录的相对 url,并通过 this post 中解释的变量将其传递给您的 js 代码。这样做时尝试使用 javascript 命名空间,以防止可能的冲突/覆盖其他同名全局变量。

    编辑: 包括 Marko 的评论作为替代解决方案。谢谢你:)

    如果是锚标签,可以简单的使用点击链接的href属性值。

    <a href="@Url.Action("Delete","Product")" class="ajaxLink">Delete</a>
    

    在你的 js 代码中

    $("a.ajaxLink").click(function(e){
    
       e.preventDefault();
       var url = $(this).attr("href");
       //use url variable value for the ajax call now.
    
    });
    

    如果是其他类型的html元素,可以使用html5的data属性来保存目标url,在你的js代码中使用jQuery的data方法获取。

    <div data-url="@Url.Action("Delete","Product")" class="ajaxLink">Delete</div>
    

    在你的 js 代码中

    $(".ajaxLink").click(function(e){
    
       e.preventDefault(); // to be safe
       var url = $(this).data("url");
       //use url variable value for the ajax call now.
    
    });
    

    【讨论】:

    • 要对此进行扩展,在您渲染 btnAnswer 按钮的剃刀代码中添加 data-url-location="@Url.Action("ActionMethodName","YourControllerName")" 并在您的 javascript 外部文件只需读取 $("#btnAnswer").data('url-location') 这将为您提供正确的 url。
    • 谢谢@Marko。这是一个很好的替代解决方案。我将其添加到未来读者的答案中(带有适当的归属:))。让我知道这是否有问题。
    【解决方案2】:

    当您在 js 文件中使用它时,您可以执行以下操作:

    $("#btnAnswer").click(function () {
    
                    var hostString = window.location.protocol + "//" + window.location.host + /";
    
                    $.ajax({
    
                        url: hostString + "/appName/Controller/method/",
                        //url: "/Controller/method/",
                        data: { answer: $("#answer").val(), question_id: $("#question_id").val(), answer_id: $("#answer_id").val() },
                        success: function (result) {
                            alert(result);
    
                        }
    
                    }).error(function () {
    
                    }).fail(function () {
    
                    });
    
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-26
      • 2011-06-15
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      相关资源
      最近更新 更多