Bla*_*eaf 26 controller base-class asp.net-mvc-4
我有一个基本控制器类:
而我所有的其他控制器都像这样继承了这个BaseClass
所有这些在MVC3中运行良好(今天再次测试,它确实有效)但似乎在MVC 4 beta中不再触发BaseController中的ExecuteCore.
任何的想法?或者任何巨大的变化都在引擎盖下?非常感谢.
public class BaseController : Controller
{
private string _myData;
public string MyData
{
get
{
return _myData;
}
}
protected override void ExecuteCore()
{
_myData = "I am doing something";
base.ExecuteCore();
}
}
public class HomeController : BaseController
{
public ActionResult Index()
{
ViewBag.MyData = MyData;
// Doing something with value in BaseClass
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
nem*_*esv 28
我能够重现你的问题.似乎ExecuteCore改变了用法.但我没有找到任何有关它的信息.我的猜测是因为现在的Controller工具IAsyncController不是AsyncController.
但是我找到了一个解决方法来获取MVC4的旧行为:
将此添加到BaseContoller:
protected override bool DisableAsyncSupport
{
get { return true; }
}
Run Code Online (Sandbox Code Playgroud)
从DisableAsyncSupport的MSDN页面(强调由我添加):
此标志用于向后兼容.ASP.NET MVC 4.允许控制器支持异步模式.这意味着
ExecuteCore不会在派生类上调用它.派生类可以覆盖此标志,并设置为true是否仍需要ExecuteCore调用它们.
Alf*_*ñoz 28
我投了nemesv的答案,因为它给了我一个关于发生了什么的解释.我有MVC3和MVC4项目,这让我很生气.
但是我有另一种解决方案.在Controller类中覆盖Initialize方法:
public abstract class BaseController : Controller
{
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
string languageId = "en";
try{
// all your code here. You have access to all the context information,
// like querystring values:
string languageId = requestContext.HttpContext.Request.QueryString["lang"];
Thread.CurrentThread.CurrentUICulture =
CultureInfo.CreateSpecificCulture(languageId);
}
finally
{
Thread.CurrentThread.CurrentUICulture =
CultureInfo.CreateSpecificCulture(languageId);
}
base.Initialize(requestContext);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的项目中让你的控制器继承自BaseController,这就是全部,BaseController调用自动传递请求上下文.它适用于MVC3和MVC4.
小智 7
您也可以使用BeginExecuteCore
protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
{
return base.BeginExecuteCore(callback, state);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9441 次 |
| 最近记录: |