我们目前正在尝试创建一个返回JsonResult的操作,并且在某些时候该操作还应该返回其中的一些HTML以及其他数据。是否可以从另一个返回PartialViewResult的动作生成HTML?
答案 0 :(得分:0)
我认为这就是你想要实现的目标。
从另一个动作生成HTML听起来很奇怪。
您可以从存储库中获取相同的模型,然后渲染相同的PartialView。您将需要一个类似以下的方法。
//在RenderingHelper类
中$.ajax({
method: "POST",
url: "GenerateReportModal.aspx/AddToPrintQueue?id=" + $('#patientNum').val(),
data: {buttonID: me.id},
contentType: "application/json; charset=utf-8", //Add this line too
dataType: "json",
success: function (data, textStatus, jqXHR) {
alert(data);
$('#GenerateReportModal').dialog('close');
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(errorThrown + ' ' + textStatus);
console.log(jqXHR);
$('#GenerateReportModal').dialog('close');
}
});
然后您将相应地渲染局部视图:
public static string RenderViewToString(ControllerContext context, string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = context.RouteData.GetRequiredString("action");
ViewDataDictionary viewData = new ViewDataDictionary(model);
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(context, viewName);
ViewContext viewContext = new ViewContext(context, viewResult.View, viewData, new TempDataDictionary(), sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
其中string renderedHtml = RenderingHelper.RenderViewToString(this.ControllerContext, "~/Views/MyController/MyPartial", viewModel);
是&#34使用的模型;其他行为"同样,viewModel
是"其他动作"使用的部分视图。太