一尘不染

ASP.NET MVC-将Json结果与ViewResult结合

json

我可以返回还包含渲染视图的Json结果吗?

我需要它来返回提交的表单的新ID及其HTML和其他一些属性。

当我需要从Json对象内的一个动作返回两个(或多个)视图结果时,这也可能会有所帮助。

谢谢!


阅读 289

收藏
2020-07-27

共1个答案

一尘不染

您还可以将PartialViewResult呈现为字符串,然后通过JSON将该字符串传递给视图,并使用jQuery在页面中呈现。

您可以在这篇文章中看到:http : //www.atlanticbt.com/blog/asp-net-mvc-using-ajax-json-
and-partialviews/。

我创建了一个扩展程序以使其更容易:

public static class MvcHelpers
{
    public static string RenderPartialView(this Controller controller, string viewName, object model)
    {
        if (string.IsNullOrEmpty(viewName))
            viewName = controller.ControllerContext.RouteData.GetRequiredString("action");

        controller.ViewData.Model = model;
        using (var sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
            var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
            viewResult.View.Render(viewContext, sw);

            return sw.GetStringBuilder().ToString();
        }
    }
}

在我的控制器中,我将其称为:

const string msg = "Item succesfully updated!";
return new JsonResult
           {
               Data = new
                          {
                              success = true, 
                              message = msg,
                              view = this.RenderPartialView("ProductItemForm", model)
                          },
               JsonRequestBehavior = JsonRequestBehavior.AllowGet
           };

在这种情况下,“ this”是控制器,“ ProductItemForm”是我的视图,“ model”是我的productItem对象:)

希望这可以帮助 ;)

2020-07-27