【问题标题】:Mvc 4 application not picking up Area contentMvc 4 应用程序没有拾取区域内容
【发布时间】:2013-06-27 18:09:57
【问题描述】:

我在我的 asp.net mvc 4 项目中创建了一个“管理”区域。现在这个区域只有基本的。 理想情况下,一旦应用程序运行,我希望用户在 URL 中键入 /Admin 并被重定向到 Admin Index 视图。 但是,当我运行该程序时,我收到一条错误消息,指出“找不到管理员”?? 我在某处缺少参考吗??

此外,常规用户登录页面是第一个呈现的视图,我需要绕过该登录页面才能进入管理部分。 但是我相信以下行会阻止第二次登录选项。

 WebSecurity.InitializeDatabaseConnection("Portal.Model.PortalDBContext","PatientPortalAccount", "PatientID", "Username", autoCreateTables: true);

请记住,我无法更改常规用户表以包含角色。 如果您还没有注意到我还在学习,请为冗长的问题道歉......

管理员控制器,

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Web;
 using System.Web.Mvc;

namespace Portal.Web.Areas.Admin.Controllers
 {
public class AdminController : Controller
{
    //
    // GET: /Admin/Admin/

    public ActionResult Index()
    {
        return View();
    }

带有一个索引actionResult,它有一个视图。

 @model Portal.Model.AdminDetails
 @{
ViewBag.Title = "Admin";
Layout = "~/Views/Shared/Login.cshtml";
}

这个区域还有生成的.cs文件AdminAreaRegistration

  using System.Web.Mvc;

  namespace Portal.Web.Areas.Admin
  {
  public class AdminAreaRegistration : AreaRegistration
  {
    public override string AreaName
    {
        get
        {
            return "Admin";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Admin", action = "Index", id = UrlParameter.Optional },
            new [] { "Admin.Controllers" }
        );
    }
}
}

在 Global.asax 文件中......

  using System;
  using System.Linq;
  using System.Web.Http;
  using System.Web.Mvc;
  using System.Web.Optimization;
  using System.Web.Routing;
  using WebMatrix.WebData;

  namespace Portal.Web
  {
// Note: For instructions on enabling IIS6 or IIS7 classic mode, 
// visit http://go.microsoft.com/?LinkId=9394801

  public class MvcApplication : System.Web.HttpApplication
  {
    protected void Application_Start()
    {
        WebSecurity.InitializeDatabaseConnection("Portal.Model.PortalDBContext",             "PatientPortalAccount", "PatientID", "Username", autoCreateTables: true);

        //BOC - Remove Web Forms View Engine
        ViewEngines.Engines.Clear();
        ViewEngines.Engines.Add(new RazorViewEngine());

        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();
    }
}
}

【问题讨论】:

    标签: c# asp.net-mvc-4


    【解决方案1】:

    您的路由中有命名空间约束:“Admin.Controllers”,但您的控制器位于命名空间“Portal.Web.Areas.Admin.Controllers”中

    【讨论】:

    • 太好了,成功了,谢谢。有什么提示可以在无需登录的情况下进入 Admin Index 视图?我是否正确地说 Global.asax 中的“WebSecurity”选项卡正在阻止此类操作?请理解我不能让普通用户成为管理员,因为普通用户表与其他产品同步。
    • @mkell 在您的控制器上添加 [Auhorize] 属性以强制重定向到登录页面
    • 我在公共类 AdminController 上面添加了它:控制器,恐怕它没有任何区别。在我可以通过 URL 访问管理索引视图之前,普通用户仍然需要登录。
    • @mkell 好的,我不明白你的要求,我仍然不确定。但是,如果您不想对特定操作进行身份验证,您可以在操作上添加 [AllowAnonymous] 属性。
    • 我可能没有正确解释。当程序运行时,用户会看到一个登录屏幕。此屏幕适用于普通用户。我需要管理员能够在 URL 中键入“/Admin”,以便重新定向到 adminLogin 屏幕。普通用户不能是管理员,我不能更改普通用户表。现在,重定向到 adminlogin 的唯一方法是让普通用户登录,然后在 URL 中键入“/Admin”...?
    猜你喜欢
    • 2014-11-12
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2015-05-26
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    相关资源
    最近更新 更多