【问题标题】:MVC basecontroller doesn't return to controller after Initializing ASP.NET初始化 ASP.NET 后,MVC 基本控制器不返回控制器
【发布时间】:2018-04-26 14:20:37
【问题描述】:

首先,我对 C# 和 ASP.NET(主要是 java 程序)还很陌生。

我有一个 BaseController,我想在其中填充一个 viewbag 以供我所有其他控制器使用。我还设置了一些会话数据并创建了一些 cookie。这是基本控制器:

    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 页面

我做错了什么?我需要来自我的基本控制器的重定向吗?

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    如果您使用自己的初始化逻辑覆盖 Controller.Initialize(),则需要调用 base.Initialize(requestContext) 以继续常规初始化过程:

    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);
    
        // rest of your code
        // ...
    }
    

    否则,this.ControllerContext(由多个属性在内部使用)将是 null。

    见Source

    【讨论】:

    • 好吧,我错过了这个!奇怪的是,这并不容易找到。但是现在可以了,谢谢!
    猜你喜欢
    • 2015-08-26
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多