有几点。如果您知道这就是要返回的全部内容,则可以将返回值键入为 ViewResult。然后您可以从重写的实现中询问该值。更重要的是,根据 MVC v1 源代码,调用 View(object) 只需在控制器上设置 ViewData.Model,然后构造一个 ViewResult。
控制器.cs:440
protected internal ViewResult View(object model) {
return View(null /* viewName */, null /* masterName */, model);
}
控制器.cs:456
protected internal virtual ViewResult View(string viewName, string masterName, object model) {
if (model != null) {
ViewData.Model = model;
}
return new ViewResult {
ViewName = viewName,
MasterName = masterName,
ViewData = ViewData,
TempData = TempData
};
}
因此,您需要做的就是调用基本方法并调用 View(string)。
namespace BaseControllers
{
public class CoolController
{
public virtual ViewResult Get()
{
var awesomeModel = new object();
return View(awesomeModel);
}
}
}
public class CoolController : BaseControllers.CoolController
{
public override ViewResult Get()
{
var ignoredResult = base.Get();
// ViewData.Model now refers to awesomeModel
return View("NotGet");
}
}
当然,您会浪费 CPU 周期来构造您忽略的 ViewResult。所以你可以这样做:
public class CoolController : BaseControllers.CoolController
{
public override ViewResult Get()
{
var baseResult = base.Get();
baseResult.ViewName = "NotGet";
return baseResult;
}
}
如果您的基本控制器返回 ActionResult,则必须在更改 ViewName 之前将其强制转换为 ViewResult。