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);
}
このスレッドに対する答えと同様に、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);
}
RenderViewToString
の代わりに、次のようなアプローチを好む
return Json(new { Url = Url.Action("Evil", model) });
あなたはあなたのjavascriptで結果をキャッチし、次のようなことをすることができます
success: function(data) {
$.post(data.Url, function(partial) {
$('#IdOfDivToUpdate').html(partial);
});
}
Url.Action( "Evil"、モデル)
getクエリ文字列を生成しますが、ajaxメソッドはpostであり、500(Internal Server Error)のエラーステータスをスローします。 – Fereydoon Barikzehy 2月14日9:51
Jsonオブジェクトに「JsonRequestBehavior.AllowGet」を追加するだけです。