На моем контроллере он унаследовал MainController и там я переопределяю Initialize
и OnActionExecuting
.
Здесь я вижу, что такое URL, и тем самым я могупроверьте, что это за Клиент , но я узнал, что для каждого вызванного Метода он запускается снова и снова, даже простой redirectToAction
будет запускать Инициализацию того же контроллера.
Есть ли лучший метод, чтобы избежать повторения вызова базы данных?Я использую Entity Framework, поэтому для вызова БД не потребуется , поскольку она уже имеет результат в кеше, но ... просто чтобы узнать, существует ли лучшая техника теперь в MVC3 вместо переменных Session Variable
пример кода
public class MyController : MainController
{
public ActionResult Index()
{
return View();
}
}
public class MainController : Controller
{
public OS_Clients currentClient { get; set; }
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
// get URL Info
string url = requestContext.HttpContext.Request.Url.AbsoluteUri;
string action = requestContext.RouteData.GetRequiredString("action");
string controller = requestContext.RouteData.GetRequiredString("controller");
object _clientUrl = requestContext.RouteData.Values["cliurl"];
if (_clientUrl != null && _clientUrl.ToString() != "none")
{
// Fill up variables
this.currrentClient = db.FindClientById(_clientUrl.ToString());
}
base.Initialize(requestContext);
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
// based on client and other variables, redirect to Disable or Login Actions
// ... more code here like:
// filterContext.Result = RedirectToAction("Login", "My");
base.OnActionExecuting(filterContext);
}
}
лучше всего сделать так:
public OS_Clients currentClient {
get {
OS_Clients _currentClient = null;
if (Session["CurrentClient"] != null)
_currentClient = (OS_Clients)Session["CurrentClient"];
return _currentClient;
}
set {
Session["CurrentClient"] = value;
}
}