栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从ASP.NET MVC操作返回部分视图和JSON

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从ASP.NET MVC操作返回部分视图和JSON

我敢肯定有多种方法可以做到这一点。我从控制器手动渲染视图,然后将渲染的视图作为JSON响应的一部分传回。

这保留了每个实体的责任。使用视图引擎仍然可以定位视图,并且可以重复使用它们。除了名称和模型类型外,控制器对视图的了解甚少或一无所知。

手动渲染

public static class RenderHelper{    public static string PartialView( Controller controller, string viewName, object model )    {        controller.ViewData.Model = model;        using( var sw = new StringWriter() )        { var 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 ); viewResult.ViewEngine.ReleaseView( controller.ControllerContext, viewResult.View ); return sw.ToString();        }    }}

在您的操作方法中:

object model = null; // whatever you wantvar obj = new {     someOtherProperty = "hello",     view = RenderHelper.PartialView( this, "_PartialName", model ) };return Json( obj );

请注意,我返回的是匿名类型。您可以返回所需的任何(可序列化的)类型,只要它具有呈现视图的字符串属性即可。

测试中

测试使用手动渲染的动作需要进行一些修改。这是由于渲染视图比在MVC管道中渲染视图要早一些。

手动渲染

  1. 输入动作方法
  2. 显式渲染视图<-这将使测试调用操作变得困难
  3. 退出动作方法

自动渲染

  1. 输入动作方法
  2. 创建查看结果
  3. 退出动作方法
  4. 处理视图结果(从而渲染视图)

换句话说,我们的手动渲染过程开始了许多其他的操作,这些操作使测试变得困难(例如与构建管理器进行交互以编译视图)。

假设您要测试操作方法而不是视图的实际内容,则可以检查代码是否在托管环境中执行。

    public static string PartialView( Controller controller, string viewName, object model )    {        // returns false from a VS 2013 unit test, true from IIS        if( !HostingEnvironment.IsHosted )        { // return whatever you want here return string.Empty;        }        // continue as usual     }

检查

HostingEnvironment.IsHosted
是廉价的(在幕后,这只是一个空检查)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/616723.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号