部分视图与Json(或两者)

bge*_*eek 19 asp.net-mvc jquery json

我使用ASP.NET MVC和jQuery,并且对我的控制器有很多Ajax请求.

使用部分视图(usercontrols)在加载页面时构建初始视图.然后,如果我需要根据我的Ajax请求追加/替换数据,我会从Json响应中构建HTML.

这种方法让我完全掌控,即.如果出现问题,我可以从控制器获取额外信息,然后根据该信息显示错误消息.

然而,最近我对在部分视图和从Json生成HTML的部分中维护HTML结构所做的所有额外工作感到非常恼火.

我喜欢制作一个jQuery ajax请求,然后让控制器返回PartialView("mypartialview"),然后只使用jQuery替换视图中的HTML.

但是,这样我就无法从控制器中附加额外的数据 - 无论是局部视图给我的是什么 - 或者什么都没有.至少那是我目前的看法.

如果某些验证在我的控制器操作中的某个时刻出错,我不想返回局部视图的HTML.

那么你如何处理这个问题呢?

谢谢阅读.

Mag*_*pie 20

基于这个 stackoverflow anwser,我刚刚开始做同样的事情.

首先为控制器类创建一个扩展方法.

public static string RenderViewToString(this Controller controller, string viewName, object model)
{
    using (var writer = new StringWriter())
    {
         var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
         controller.ViewData.Model = model;
         var viewCxt = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer);
         viewCxt.View.Render(viewCxt, writer);
         return writer.ToString();
     }
}
Run Code Online (Sandbox Code Playgroud)

然后在controllers动作方法中返回json.

return Json(new
                            {
                                Html = this.RenderViewToString("MyView", model),
                                SomeExtraData = data
                            });
Run Code Online (Sandbox Code Playgroud)

你的ajax请求现在将收到包含在其中的html的json.仍在尝试使用这种方法而不是返回普通的Html片段.

希望有所帮助.

编辑更新以使用剃须刀


Pad*_*ddy 2

我相信您可以将渲染的 html 作为字符串返回 - 这也可以是包含要显示的错误消息的 html 字符串?