只有在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); } }