Un par de puntos. Puede escribir su valor de retorno como ViewResult si sabe que eso es todo lo que va a devolver. Entonces puede interrogar ese valor desde la implementación anulada. Más importante aún, de acuerdo con la fuente MVC v1, al llamar a View (objeto) simplemente establece ViewData.Model en el controlador, luego construye un ViewResult.
Controller.cs: 440
protected internal ViewResult View(object model) {
return View(null /* viewName */, null /* masterName */, model);
}
Controller.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
};
}
Así que todo lo que necesita hacer es llamar al método de base y la vista Llamada (cadena).
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");
}
}
Por supuesto que desperdicia ciclos de CPU construyendo el ViewResult que ignora.Así que en lugar usted puede hacer esto:
public class CoolController : BaseControllers.CoolController
{
public override ViewResult Get()
{
var baseResult = base.Get();
baseResult.ViewName = "NotGet";
return baseResult;
}
}
Si el controlador base vuelve ActionResult, vas a tener que echarlo a ViewResult antes de cambiar la ViewName.
¿Intentó simplemente heredar del controlador base y preparar las vistas? – LukLed