将PartialViewResult添加到JsonResult

时间:2015-07-01 12:12:20

标签: json asp.net-mvc razor

我们目前正在尝试创建一个返回JsonResult的操作,并且在某些时候该操作还应该返回其中的一些HTML以及其他数据。是否可以从另一个返回PartialViewResult的动作生成HTML?

1 个答案:

答案 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是"其他动作"使用的部分视图。太