将部分视图返回为 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);
}
117940 次浏览

您可以从 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);
});
}
 $(function () {
$("select#ExamID").change(function (evt) {


var classid = $('#ClassId').val();
var StudentId = $('#StudentId').val();
$.ajax({
url: "/StudentMarks/ShowStudentSubjects",
type: 'POST',
data: { classId: classid, StudentId: StudentId, ExamID: $(this).val() },
success: function (result) {
$('#ShowStudentSubjects').html(result);
},
error: function (xhr) { alert("Something seems Wrong"); }
});
});
});