2016-08-13 58 views
0

我想要實現的是更新包含部分視圖的頁面的某些部分。我對這樣的嘗試是下面:如何將通過AJAX收到的數據傳遞給ASP MVC部分視圖?

 $.ajax({ 
     type: 'GET', 
     url: actionUrl, 
     success: function (data) { 
      $("#results").html(""); 
      $("#results").append(@Html.Partial("_FirstPartial", data.FirstDataSet)); 
      $("#results").append(@Html.Partial("_SecondPartial", data.SecondDataSet));  
      } 
     }); 

我當然不能錯過JS變量ASP MVC方法那樣的,所以我怎麼可能?或者,我可以更新頁面的方式有一個完全不同的,更好的方法?

+0

'@ Html.Partial()'是剃鬚刀代碼,在服務器發送到視圖之前在服務器上進行評估。你的控制器方法需要返回一個局部視圖(如果你需要返回2個局部視圖,因爲他們需要在頁面的不同位置渲染,然後做2個Ajax調用) –

回答

2

視圖(JavaScript)的:

$.ajax({ 
    type: 'GET', 
    url: actionUrl, 
    success: function (data) { 
     $("#results").html(""); 
     $.post('@Url.Action ("FirstPartial")',{data:data.FirstDataSet},function(ret){ 
      $("#results").append(ret); 
      $.post('@Url.Action ("SecondPartial")',{data:data.SecondDataSet},function(ret2){ 
       $("#results").append(ret2); 
      } 
     } 
    } 
}); 

控制器:

public ActionResult FirstPartial(string data) 
{ 
    return PartialView("_FirstPartial", data); 
} 
public ActionResult SecondPartial(string data) 
{ 
    return PartialView("_SecondPartial", data); 
} 

您需要使用部分行動(即返回一個局部視圖)。在JavaScript中,獲取數據集後,您可以調用另一個部分操作來呈現數據集。

我嵌套了兩個Ajax調用來呈現第一個視圖下的第二個視圖。如果刪除嵌套,則第二個可能會在第一個之前呈現。

+0

你的代碼很好,但強制把邏輯JavaScript代碼因爲您使用Razor與JS混合在一起進入MVC視圖。 –

+0

@Mahmoodvcs我喜歡這個解決方案。謝謝。但是看起來好像Html.Action在頁面加載時觸發,無論你把它放在js中。結果,它以空模型崩潰。你有什麼提示嗎? –

+1

啊!!抱歉。它必須是'@ Url.Action'。編輯答案。 – Mahmoodvcs

0

使你的控制器的方法部分你想返回,然後在Index.cshtml文件做這樣的事情:

<script> 
    var Services = { 
    linkToPartial: '@Url.Action('MethodName', 'Controller')' 
    } 
</script> 

此代碼將提供您可以在$阿賈克斯成功使用操作鏈接方法並提供參數。

$("#results").html(""); 
$.ajax({ 
    method: 'GET', 
    url: Services.linkToPartial, 
    data: { 
    argumentName: data.FirstDataSet 
    } 
}).done(function (html) { 
    $('#results').append(html); 
}); 
相關問題