web-dev-qa-db-ja.com

MVCがJSONとして部分ビューを返す

MVCからのJSON応答の一部としてパーシャルをレンダリングすることからHTML文字列を返す方法はありますか?

    public ActionResult ReturnSpecialJsonIfInvalid(AwesomenessModel model)
    {
        if (ModelState.IsValid)
        {
            if(Request.IsAjaxRequest()
                return PartialView("NotEvil", model);
            return View(model)
        }
        if(Request.IsAjaxRequest())
        {
            return Json(new { error=true, message = PartialView("Evil",model)});
        }
        return View(model);
    }
69
Marty Trenouth

このスレッドに対する答えと同様に、PartialViewResultオブジェクトからhtml文字列を抽出できます。

ビューを文字列としてレンダリング

PartialViewResultとViewResultはどちらもViewResultBaseから派生しているため、同じメソッドが両方で機能するはずです。

上記のスレッドのコードを使用すると、次を使用できます。

public ActionResult ReturnSpecialJsonIfInvalid(AwesomenessModel model)
{
    if (ModelState.IsValid)
    {
        if(Request.IsAjaxRequest())
            return PartialView("NotEvil", model);
        return View(model)
    }
    if(Request.IsAjaxRequest())
    {
        return Json(new { error = true, message = RenderViewToString(PartialView("Evil", model))});
    }
    return View(model);
}
107
cacois

RenderViewToStringの代わりに、次のようなアプローチを好む

return Json(new { Url = Url.Action("Evil", model) });

あなたはあなたのjavascriptで結果をキャッチし、次のようなことをすることができます

success: function(data) {
    $.post(data.Url, function(partial) { 
        $('#IdOfDivToUpdate').html(partial);
    });
}
30
Manatherin

Url.Action( "Evil"、モデル)

getクエリ文字列を生成しますが、ajaxメソッドはpostであり、500(Internal Server Error)のエラーステータスをスローします。 – Fereydoon Barikzehy 2月14日9:51

Jsonオブジェクトに「JsonRequestBehavior.AllowGet」を追加するだけです。

0
Ricardo Cardoso