2012-04-19 11 views
2

こんにちは私は私の問題について十分な答えを見つけられませんでした。私は、jsonデータとhtmlの両方をajaxによって呼び出されたアクション結果から返す必要があります。MVCはjsonとhtmlの両方の応答を返す

$if (Request.IsAjaxRequest()) 
     { 
      return Json(new 
          { 
           val1= Model.val1, 
           val2 = Model.val2, 
           val3= Model.val3, 
           Html = PartialView("_SearchResult", Model) 
          }); 
     } 

私はajaxの成功部分で何をしなければなりませんか? これは悪い試みです:

$.ajax({ 
     type: "post", 
     dataType: "json", 
     url: actionUrl, 
     data: { 
      specs: selections, 
      params: parameters 
     }, 
     success: function (response) { 
      $("#maincontent").html(response.html); 
      val1= response.val1; 
      val2= response.val2; 
      val3= response.val3; 
     }, 
     error: function (xHR) { 
      alert(xHR.status); 
     } 
    }); 

Val1,2,3は、私はモデルデータが変化していると私は、この変更された値を知っておく必要がありますので、知っている必要がありVARSです。あなたがjsonよりも値を返す方法を知っていたらもっと教えてください。しかし、私はページの一部を更新するには、同様に応答HTMLを返す必要があります。 私を助けていただきありがとうございます。

答えて

1

PartialViewは、ActionResultを返します。希望するとおり、部分ビューのHTMLは文字列として返しません。あなたがする必要があるのは、ActionResultを実行して、レンダリングするHTMLを取得することです。

これを行うにはいくつかの方法がありますが、one quick and dirty way is to follow this articleです。

あなたがやっていることをする良い方法は、val1-3が何であるかによって異なります。 DOM要素、ローカルまたはグローバルスコープの変数ですか?あなたは、val1-3の値を設定するいくつかの関数を呼び出すjavascriptをPartialViewに持たせることができます。ような何か:

public ActionResult Search() 
{ 
    // ... 
    return PartialView("_SearchResult", Model); 
} 

_SearchResult部分図:UpdateValsは、AJAX呼び出しを行うページに座って、いくつかの機能である

<!-- your html here --> 
<script type="text/javascript"> 
    UpdateVals(@Model.val1, @Model.val2, @Model.val3); 
</script> 

+0

UpdateVals()関数を使用してこれらのモデルプロパティを更新するとき、別のActionResultを呼び出す必要がありますか?私がこの全体的な質問をしているのは、モデルがクライアント側の値を更新していないということです。これはおそらくオブジェクトではないからです。それを何とか更新する必要があります。あなたが提案したように、クライアント側でモデルの値を更新できることは確かですか? – Muff

+0

私は、元の見解と、理解し、より明確な答えを与えるためにアクションの関連部分を見なければならないと思います。私は基本的には次のように見ています:検索フォームで、インデックスページなどがあります。これには、AJAX呼び出しを含むJSの束があります。これはあなたの検索アクションにぶつかり、検索結果HTMLとこれらのModel.val1-3を返します。私はval1-3が何であるか分からないので、あなたがしようとしていることを見るのは難しいです。 – HackedByChinese

+0

基本的に私はモデルを使ってパーシャルビューを返します。そして、モデルの変更された値にアクセスするには、ajaxで返す必要があります。私の問題は、モデル全体のページをリロードするまで(jQueryでアクセスすると、モデルの古い値が表示されるということです)。これは正常な動作ですか? – Muff

関連する問題