簡體   English   中英

從MVC Razor視圖(而非Index.cshtml)調用時,Ajax調用失敗

[英]Ajax call fails when called from MVC Razor view other than Index.cshtml

我對為什么從索引視圖中調用我的Ajax調用成功而從具有不同名稱的視圖中調用卻失敗的原因感到困惑。 我有一個ASP .NET MVC 4項目,該項目還涉及通過Javascript進行的一些Ajax請求。 我在此頁面上的Javascript / JQuery代碼非常復雜,以至於我已將它們編寫在單獨的Javascript文件中。 這是我發出Ajax請求的Javascript文件之一的簡化​​摘錄:

//to be called in the JQuery page load function
function initialize(){
    $.ajax({ url: MyController/GetData, async: false })
        .done(function(returnedData) {
            doStuff(returnedData);
        });
}

在我的Home控制器中,我創建了一個默認名稱為Index.cshtml的新View。 在此視圖中,我引用了包含上述功能的外部Javascript文件。 當我打開/Home頁面時(因為我具有默認的路由設置,所以它是Home/Index ),將調用initialize()函數,並且Ajax調用將按預期成功

我創建了另一個名為Details.cshtml視圖,並且在此頁面中,我還引用了相同的Javascript文件。 當我打開/Home/Details頁面時,將調用initialize()函數,而Ajax調用將失敗 錯誤消息說它正在尋找/Home/Details/MyController/GetData ,它肯定不存在。

奇怪的是,同一呼叫只能在一個頁面上工作,而不能在另一頁面上工作。 我的問題:

  1. 有人可以解釋為什么會這樣嗎?
  2. 有什么補救辦法嗎?

另外,請注意,我已經閱讀了一些有關從MVC Razor視圖調用Ajax的問題​​,它們通常建議您使用Url.Action(...)創建URL。 問題是在這種情況下,這對我來說不是一個選擇,因為我真的想將我的Javascript與我的Razor View分開。 另外,如果這是一個障礙,那么為什么從“索引”頁面調用它時仍然有效?

謝謝您幫忙。

更新:這是RouteConfig文件:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("favicon.ico");

        routes.MapRoute(
            name: "Default", 
            url: "{controller}/{action}/{id}",
            defaults:new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
    }
}

注意:當我在Home/IndexHome/Details上時,不會僅發生此行為。 我注意到Ajax調用可以從AnyController/Index頁面正常工作,但是從AnyController/AnyOtherPage調用時失敗。

這取決於您的路由,但是請嘗試以下操作(在MyController前面加一個斜杠):

function initialize(){
    $.ajax({ url: /MyController/GetData, async: false })
        .done(function(returnedData) {
            doStuff(returnedData);
        });
}

它還可以幫助指定它是get還是post,以及您希望其發送為的數據類型。 Mvc與Json很好:

function initialize(){
    $.ajax({ url: /MyController/GetData, async: false, dataType:"json", type:"Get" })
        .done(function(returnedData) {
            doStuff(returnedData);
        });
}

它在索引頁面上起作用的原因可能是因為詳細信息必須顯示在url中,但索引沒有顯示。 因此,如果您的索引URL是Home / Index,則Home /仍然有效。 有關詳細信息,它必須顯示為“主頁/詳細信息”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM