2016-08-13 2 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では、データセットを取得した後、データセットをレンダリングするために別の部分的なアクションを呼び出します。

最初のビューの下に2番目のビューをレンダリングするために、2つのajax呼び出しをネストしました。ネストを削除すると、2番目のネストが最初のネストの前にレンダリングされます。

+0

コードは完璧ですが、 RazorをJSと混合して使用するので、MVCビューに変換できます。 –

+0

@Mahmoodvcs私はこの解決策が好きです。ありがとう。しかし、それはあなたがjsにどこに置くかに関係なく、ページがロードされるとHtml.Actionが発生するように見えます。その結果、空のモデルでクラッシュします。あなたはそれについて何か示唆を持っていますか? –

+1

ああ!ごめんなさい。それは '@ Url.Action'でなければなりません。答えを編集しました。 – Mahmoodvcs

0

、あなたのIndex.cshtmlファイル内でこのようなものを作り、あなたがしたい部分を返すあなたのコントローラメソッドで行います。

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

このコードは、あなたの$ Ajaxの成功で使用できるアクションのリンクを提供します方法と引数を提供します。

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