MVC basecontroller не возвращается к контроллеру после инициализации ASP.NET - PullRequest
0 голосов
/ 26 апреля 2018

Прежде всего, я довольно новичок в C # и ASP.NET (в основном это программа Java).

У меня есть BaseController, где я хочу заполнить viewbag для всех остальных моих контроллеров. Я также установил некоторые данные сеанса и создал некоторые куки. Это базовый контроллер:

    public abstract partial class BaseController : Controller
{
    // GET: Base
    protected override void Initialize(RequestContext requestContext)
    {
        try
        {
            //Checks if the user is logged in
            if (requestContext.HttpContext.Session["customer"] != null)
            {
                ViewBag.Customer = requestContext.HttpContext.Session["customer"];
                ViewBag.Points = requestContext.HttpContext.Session["points"];
                ViewBag.CardNumber = requestContext.HttpContext.Session["cardNumber"];
            }

            //Gets the products to be displayed
            var products = ProductList.Instance.AsQueryable();
            ViewBag.Products = products;

            //Checks to see if the user has a cart added to his requestContext.HttpContext.Session
            if (requestContext.HttpContext.Session["cart"] == null)
            {
                requestContext.HttpContext.Session["cart"] = new Cart();
            }
            Cart cart = (Cart)requestContext.HttpContext.Session["cart"];

            ViewBag.CartCount = cart.Count();
            if (requestContext.HttpContext.Session["ticketID"] == null)
            {
                requestContext.HttpContext.Session["ticketID"] = Guid.NewGuid();
            }

            //Adds a cookie to the user with his selected theme
            HttpCookie cookieUserTheme = requestContext.HttpContext.Request.Cookies["cookieUserTheme"];
            if (cookieUserTheme != null)
            {
                requestContext.HttpContext.Session["UserPref"] = UserModel.GetThemeByName(cookieUserTheme.Value);
            }
            else
            {
                requestContext.HttpContext.Session["UserPref"] = UserModel.GetThemeByName("5");
                var cookie = new HttpCookie("cookieUserTheme", ((UserPref)requestContext.HttpContext.Session["UserPref"]).ID);
                cookie.Expires = DateTime.Now.AddDays(90);
                requestContext.HttpContext.Response.Cookies.Add(cookie);
            }
            ViewBag.UserPref = requestContext.HttpContext.Session["UserPref"];
        }
        catch (Exception ex)
        {

            throw ex;
        }
    }
}
}

А это контроллер.

    public class AdminController : BaseController
{
    // GET: Admin
    public ActionResult Index()
    {
        ViewBag.Themes = SiteMethods.GetAllThemes();
        return View();
    }

Но когда это делается, он просто переходит на следующую страницу ASP.NET enter image description here

Что я делаю не так? Нужно ли перенаправление с моего базового контроллера?

1 Ответ

0 голосов
/ 26 апреля 2018

Если вы переопределяете Controller.Initialize() своей собственной логикой инициализации, вам нужно вызвать base.Initialize(requestContext), чтобы продолжить обычный процесс инициализации:

protected override void Initialize(RequestContext requestContext)
{
    base.Initialize(requestContext);

    // rest of your code
    // ...
}

В противном случае this.ControllerContext (который используется внутри нескольких свойств) будет null.

См. Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...