2017-01-03 13 views
0

私のコントローラコード:ajaxを使用してコントローラからHTMLを返す方法は?

public async Task<ActionResult> GetHtml(int id) 
    { 
     var myModel = await db.Models.FindAsync(id); 

     return Json(new { jsonData = myModel.MyHtml }, JsonRequestBehavior.AllowGet); 
    } 

マイビューコード:

$('#MyDropDownList').on('change', function() { 
    var myModelId = $(this).val(); 
    var urlGetMyHtml = '@Url.Action("GetHtml", "MyHtmlController")'; 
    $.getJSON(
     urlGetMyHtml, 
     { id: myModelId }, 
     function(jsonData) { 
      console.log(jsonData);     
      $('textarea#MyHtmlArea').val(jsonData); 
    }); 
}); 

成功機能は、私はフィドラーとFirebugのを確認...実行したことがない、とのコードには、コントローラにsuccessfuly動作し、クライアントに提供します。しかし、その機能は実行されません...

私が有効なJSONを持っている場合にのみ、成功関数が実行されることを発見しました。私の推測では、JSONにはHTMLコード(tinymceのようなWYSIWYGエディター) getJSONはそれが有効ではないと言います...

これで、ajaxを使用してHTMLスニペットを送信する正しい方法は何ですか?

+0

これを行う典型的な方法は、コントローラがjsonではなくビューまたは部分的なビューを返すようにすることです。 –

+1

まあ、HTMLはJSONではありません。 JSONを返す場合は、JSON文字列内のHTMLを書式設定するか、またはHTMLを返します。 –

+0

HttpServerUtility.HtmlEncodeを試しましたか?任意のhtmlを安全な文字列にエンコードします。 –

答えて

1

JSONとしてHTMLを返すことは可能ですが、私には少し遠いところです。

単純にHTMLコードの文字列を返す場合は、return Content(myModel.MyHtml)とするだけです。

JavaScriptを$.getJSONに変更する必要があります。のような単純なもので$.getJSONのようなものですが、応答にJSONデータは必要ありません。

$.get(urlGetMyHtml, 
      { id: myModelId }, 
      function(response) { 
       $('textarea#MyHtmlArea').val(response); 
      }); 
関連する問題