当前位置:  开发笔记 > 编程语言 > 正文

单元测试我的控制器方法导致一个空的ViewName?

如何解决《单元测试我的控制器方法导致一个空的ViewName?》经验,为你挑选了1个好方法。



1> tvanfosson..:

只有在ViewResult中设置ViewName时才会显示ViewName.如果您的视图名称与您的控制器名称匹配,那么我将检查以确保ViewName为null或为空,因为您将不希望在视图上设置名称(IMO)正确的行为.我只检查ViewName是否设置,当我打算要返回的视图与操作不匹配时 - 例如,返回"错误"视图时.

编辑:以下是ViewResultBase.cs中的ExecuteResult的源代码(来自RC1,我的Macintosh上没有RTW的源代码).正如您所看到的,它会检查是否已直接设置ViewName,如果没有,则将其从控制器上下文的路由数据中的操作中提取出来.这只发生在ExecuteResult中,在控制器的操作完成后调用它.

    public override void ExecuteResult(ControllerContext context) {
        if (context == null) {
            throw new ArgumentNullException("context");
        }
        if (String.IsNullOrEmpty(ViewName)) {
            ViewName = context.RouteData.GetRequiredString("action");
        }

        ViewEngineResult result = null;

        if (View == null) {
            result = FindView(context);
            View = result.View;
        }

        ViewContext viewContext = new ViewContext(context, View, ViewData, TempData);
        View.Render(viewContext, context.HttpContext.Response.Output);

        if (result != null) {
            result.ViewEngine.ReleaseView(context, View);
        }
    }


不.我的意思是,为了选择视图,它会检查ViewResult中的ViewName是空还是空,如果是,则选择与该操作同名的视图.除非您在ViewResult中专门设置ViewName,否则ViewName将为null.我将从源代码发布相关代码
AHHHHHHHHHHHHHH !!!! 我现在得了:)所以如果我确实返回了View("Index",viewdata),那么将设​​置viewname!因为(在我的原始示例中)我刚刚返回了viewdata,它通过方法的名称找出了视图!啊!疑难杂症!:)
推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有