2015-05-19 74 views
2

我知道這是已回答了很多次類似的requeriments一個共同的問題,但我沒有找到解決它在我的方案的方式。我使用DevExpress MVC組件。有像下面這樣的樹視圖:用行動執行Ajax調用在MVC5

@Html.DevExpress().TreeView(settings => 
{ 
    settings.Name = "NavigationClientsList"; 
    settings.AllowSelectNode = true; 
    Model.ForEach(_client => 
    { 
     settings.Nodes.Add(node => 
     { 
      node.Name = String.Format("{0}_client_{1}", settings.Name, _client.ClientID); 
      node.Text = _client.ClientName; 
     }); 
    }); 

    settings.ClientSideEvents.NodeClick = "OnTreeViewNodeClick"; 

    settings.PreRender = (source, e) => 
    { 
     ASPxTreeView treeView = (ASPxTreeView)source; 
     treeView.ExpandAll(); 
    }; 
}).GetHtml() 

而且我的NodeClick事件:

function OnTreeViewNodeClick(s, e) { 
    if (e.node.name.indexOf("_client_") > -1) { 
     var tmpDivDescription = e.node.name.split("_"); 
     if (tmpDivDescription.length = 3) { 
      var tmpID = tmpDivDescription[2]; 
      //alert(tmpID); 
      //$("#testDisplay").text("ALGO"); 
      $.ajax({ 
       url: 'Home/Client/',//'@Url.Action("Client", "Home")',//'Home/Client/25',//'@Url.Action("Client", "Home")', 
       data: { 'id': tmpID }, 
       dataType: "html", 
       success: function (result) { 
        //alert('OK!') 
        $("#DataDisplay").html(result); 
       }, 
       error: function (xhr) { alert('ERROR!' + xhr.responseText) } 
      }); 
     } 

    } else { 

    } 
} 

我試了兩種方法來執行Ajax調用

url: 'Home/Client/'url: '@Url.Action("Client", "Home")'

第一按預期工作,但在嘗試使用第二個UrlAction時,服務器抱怨無法找到該資源:

Beschreibung:HTTP 404. Die gesuchte Ressource oder eine ihrerAbhängigkeitenwurdemöglicherweiseentfernt,umbenannt oder istvorübergehendnichtverfügbar。在這裏,你可以看到你的網站,並且可以在你的網站上找到你想要的東西。

Angeforderter網址:/@Url.Action("Client」, 「家」)

正如你所看到的,所請求的URL添加一個 「/」。我不知道這是否是我的問題的原因。

因爲我已找到了所有的主題和資源,他們所使用的「正常」 Url.Action格式。

有什麼想法?

+0

您使用的領域? –

+0

我在Application_Start方法中有'AreaRegistration.RegisterAllAreas();',但我沒有定義任何Special。我保留模板的Default RegisterRoutes。 – blfuentes

+0

是您的外部文件中的NodeClick事件嗎?如果這樣的剃刀語法將不可用 – Mackan

回答

2

您不能在外部js文件中使用Razor語法。相反,你將不得不使用要麼...

  1. 你嘗試的靜態解,'/Home/Client/'
  2. 移動整個JavaScript以你的觀點(不推薦)
  3. 使用JavaScript變量存儲URL,並將其傳遞到外部文件:

    <script type="text/javascript"> 
        var myPath = '@Url.Action("Client","Home")'; 
    </script> 
    

    而在外部JavaScript文件:

    $.ajax({ 
        url: myPath; 
        .... 
    
  4. 另一個類似的選項是使用html5數據屬性。通常我選擇是否Ajax調用被放置在一個事件的選項,就像click

    <span data-url='@Url.Action("Client","Home")'>...</span> 
    

    和外部JavaScript文件:

    $("span").click(function() { 
        $.ajax({ 
         url: $(this).attr("data-url"), //or $(this).data("url") 
         .... 
    
+1

謝謝,它工作。 – blfuentes

+0

@Mackan哪種方法比較好,1或3? – frost

+1

@霜取決於您的項目和偏好。爲了可維護性,可擴展性和與其他人共享代碼,對所有帶路徑的js變量使用視圖似乎是最好的想法。但如果它是一個較小的項目,並且適合您的偏好,則可以直接在js文件中使用靜態url。就我個人而言,我已經使用了兩種方法,還有其他一些方法(比如在url中設置數據屬性等)。 – Mackan