2016-10-20 83 views
1

我在我的index.cshtml ID爲#myresults的div元素,我試圖通過調用mvc控制器方法通過jquery.load方法加載數據。但我無法得到正確的語法。jquery負載調用控制器和填充div元素

我傳遞一個自定義對象作爲參數。

var mycustomObject = { 
    obj1:value1, 
    obj2:value2, 
    .. 
} 

下無法正常工作......(一個我曾嘗試其它組合well..i獲得服務器未找到錯誤)

$("#myresults").load ('@Url.Action("MyActionMethod","Home")',mycustomObject); 

而以下工作

$("#myresults").load('/Home/MyActionMethod', mycustomObject); 

儘管最後一條語句有效,但它僅適用於本地主機。

什麼是正確的語法用於jQuery加載與Url.Action?

+0

此代碼應該正常工作。 – Shyju

+0

它不工作,因爲現在..不是在哪裏出錯 – cableload

+0

腳本是在外部文件? (剃鬚刀代碼不在外部文件中解析) –

回答

1

@Url.Action()總是會生成正確的URL,因此,如果你得到一個404,這意味着此代碼位於外部腳本文件中。 Razor代碼不會在外部腳本中執行,因此您的網址實際上就是文本「@ Url.Action(」MyActionMethod「,」Home「)」。

選項來解決這個包括

  1. 移動代碼到視圖或其佈局
  2. 聲明視圖中的全局變量 - var url = '@Url.Action("MyActionMethod","Home")';一個在外部文件使用 $("#myresults").load(url, mycustomObject);
  3. 分配url作爲data-*屬性的元素,例如 <button type="button" id="loadSomething" data-url="@Url.Action("MyActionMethod","Home")">...</button>和 外部文件

    $('#loadSomething').click(function() { 
        var url = $(this).data('url'); 
        $("#myresults").load(url, mycustomObject); 
    }); 
    
+0

感謝您的其他兩個可用於外部文件的選項。 – cableload

1

定義的div元素爲:

<div id="myresults" onload="loadMyData();"></div> 

,使Ajax調用你的方法:

<script type="text/javascript"> 
    function loadMyData() { 
      $.ajax({ 
       cache: false, 
       url: '@Html.Raw(Url.Action(MyActionMethod","Home"))', 
       data: { obj1:value1, obj2:value2 }, 
       dataType: "json", 
       type: 'post', 
       success: function (result) { 
        if (result.success) { 
         $('#myresults').html(result.data); 
        } 
        else { 
         alert("Failed to load data!"); 
        } 
       } 
      }); 
     } 
</script>