0

何らかの処理が結果をjsonオブジェクトとしてビューに送信した後、mvcビューからコントローラーとコントローラーにユーザーリクエストを送信しています。私の現在のソリューションは機能していますが、(現在のように)js関数ではなく、ビュー側でhtml要素をレンダリングしたいと思います。

function GetTabData(xdata) {
    $.ajax({
        url: ('/Home/GetData'),
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify({ id: xdata }),

        success: function (result) {
            var data = null;
            data = '<div class="list-products clearfix">
            data += '<a href="/Home/MyData/' + item.Id + '">
....
}

だから私はこのすべてのdivと他のhtml要素を削除して純粋なデータを送信してビューでこれをフォーマットしたいのですが、どうすればこれを行うことができますか?

4

1 に答える 1

2

次に、コントローラーアクションで、JsonResultの代わりにすぐに使用PartialViewできるHTMLフラグメントを含むを返すようにします。

public ActionResult GetData()
{
    MyViewModel model = ...
    return PartialView(model);
}

これで、成功コールバック内で行う必要があるのは、jQueryの.html()関数を使用することだけです。

success: function (data) {
    $('#someContainingDiv').html(data);
}

~/Views/Home/GetData.cshtml次に、ビューモデルに強く型付けされ、対応するHTMLをレンダリングする対応する部分ビュー( )が作成されます。

@model MyViewModel
<div class="list-products clearfix">
@Html.ActionLink("click me", "MyData", "Home", new { id = Mode.Id }, null)
...

ご覧のとおり、これにより、適切なマークアップとURLを生成するHTMLヘルパーを使用できますが、元の例では、アンカータグにURLをハードコーディングしていまし/Home/MyDataたが、これは非常に悪いことです。

AJAXリクエストによって呼び出されたコントローラーアクションから送信される純粋なJSONデータと、マークアップを含む部分的なビューの送信との間のバランスを実際に見つける必要があります。HTMLマークアップを作成するために、AJAX成功コールバックで多くの文字列連結を使用していることに気付いた場合は、サーバー側のロジックを切り替えて、目的のHTMLを直接返す必要があります。

于 2012-12-26T14:52:45.573 に答える