Asp.net mvc 关于如何组织控制器asp.net mvc3的建议

Asp.net mvc 关于如何组织控制器asp.net mvc3的建议,asp.net-mvc,Asp.net Mvc,学习mvc并构建全面的电子商务应用程序 管理员应该能够添加编辑他们喜欢的内容 让我们以员工为例 我添加了一个名为“Admin”的区域。在Admin中我有员工 在这里,管理员应该能够添加有关员工的编辑信息 现在在用户部分,用户应该不能添加编辑等 现在我有两个控制器 区域管理员管理员管理员员工管理员 关于Tus控制器和员工控制器的区域 我觉得这不对。你如何处理这种代码重复? 我只想要一个控制器。在这种情况下,你如何构造你的mvc应用程序 有我可以下载的例子吗? 寻找一个很好的例子,你可以看到工作和运

学习mvc并构建全面的电子商务应用程序

管理员应该能够添加编辑他们喜欢的内容

让我们以员工为例

我添加了一个名为“Admin”的区域。在Admin中我有员工 在这里,管理员应该能够添加有关员工的编辑信息

现在在用户部分,用户应该不能添加编辑等

现在我有两个控制器

  • 区域管理员管理员管理员员工管理员
  • 关于Tus控制器和员工控制器的区域
  • 我觉得这不对。你如何处理这种代码重复? 我只想要一个控制器。在这种情况下,你如何构造你的mvc应用程序

    有我可以下载的例子吗? 寻找一个很好的例子,你可以看到工作和运行动态主题等领域


    感谢您的建议

    您可以使用单个
    ~/Controllers/employeescocontroller
    控制器来处理应用程序中的
    员工
    资源。在此控制器内,需要管理(或某些登录用户)权限的操作可以通过指定执行此操作所需的角色来使用属性修饰:

    public class EmployeesController: Controller
    {
        // Anyone can list employees, even anonymous users
        public ActionResult Index()
        {
            IEnumerable<Employee> employees = _repository.GetEmployees();
            return View(employees);
        }
    
        public ActionResult Show(int employeeId)
        {
            Employee employee = _repository.GetEmployee(employeeId);
            return View(employee);
        }
    
    
        // Only administrators can update employees
        [Authorize(Roles = "admin")]
        [HttpPost]
        public ActionResult Update(Employee employee)
        {
            _repository.Update(employee);
            return RedirectToAction("Index");
        }
    
        // Only administrators can delete employees
        [HttpDelete]
        [Authorize(Roles = "admin")]
        public ActionResult Destroy(int employeeId)
        {
            _repository.Delete(employeeId);
            return RedirectToAction("Index");
        }
    
        ... and some other actions following the Simply RESTful pattern: 
        http://mvccontrib.codeplex.com/wikipage?title=SimplyRestfulRouting
    }
    
    公共类EmployeesController:控制器
    {
    //任何人都可以列出员工,甚至匿名用户
    公共行动结果索引()
    {
    IEnumerable employees=_repository.GetEmployees();
    返回视图(员工);
    }
    公共行动结果显示(int employeeId)
    {
    Employee=\u repository.GetEmployee(employeeId);
    返回视图(员工);
    }
    //只有管理员才能更新员工
    [授权(Roles=“admin”)]
    [HttpPost]
    公共行动结果更新(员工)
    {
    _更新(员工);
    返回操作(“索引”);
    }
    //只有管理员才能删除员工
    [HttpDelete]
    [授权(Roles=“admin”)]
    公共行动结果销毁(int employeeId)
    {
    _repository.Delete(employeeId);
    返回操作(“索引”);
    }
    …以及遵循简单RESTful模式的其他一些操作:
    http://mvccontrib.codeplex.com/wikipage?title=SimplyRestfulRouting
    }
    
    我假设您这样做是为了使用身份验证并拥有漂亮的URL: /行政/雇员 /关于/雇员

    在/Controllers/EmployeeController中只有一个控制器怎么样。您可以在任何需要身份验证的方法上设置[Authorize]属性,并使用自定义路由控制URL

        routes.MapRoute( _
            "Admin_Employee", _
            "Admin/{controller}/{action}/{id}", _
            New With {.controller = "Employee", .action = "Index", .id = UrlParameter.Optional} _
        )
    
        routes.MapRoute( _
            "AboutUs_Employee", _
            "Aboutus/{controller}/{action}/{id}", _
            New With {.controller = "Employee", .action = "Details", .id = UrlParameter.Optional} _
        )
    

    谢谢你的回复。我这样做是因为有很好的URL,但也因为就我目前所知,这似乎是一个很好的方法,如果没有意义,愿意改变。只是想知道人们如何做你可以在codeplex上查看“啤酒屋”示例项目。它有一些很好的例子来说明如何做到这一点。试图理解你建议的路线。我可以看到区别,但不确定它是如何工作的。你是说无论我去哪里,它都会找到employeecontroller,因为你的路线?没错。路由将url转换为实际运行的代码。在我的主控制器“EmployeeController.Index”中返回视图现在没有指向任何东西。它应该指向什么?想法是它应该相应地重定向。但是如何重定向?谢谢你的回答。你的意思是在主控制器中而不是在区域中创建EmployeeController,然后在需要管理的方法上添加authorize属性。这是你的意思吗?如果不是管理员角色,也可以在视图中隐藏“添加-编辑-删除”。当查看列表时,如果不是admin,我想隐藏上面的链接。是否有@if AdminRole{etc..}@user231465,是的,这正是我的意思。就隐藏链接而言,这是完全可能的。您可以通过
    User.IsInRole(“admin”)
    在视图模型上定义布尔属性,该属性指示是否应显示某些链接,并在控制器操作界面内定义此属性。我见过人们在视图中直接执行
    @if(User.IsInRole(“admin”){…}
    ,但我个人更喜欢在控制器中执行此操作,并将信息传递到视图模型中的视图。因此在视图中:
    @if(Model.ShouldShowSomeLinks){…}
    。。。关于根据用户角色有条件地显示一些链接,我喜欢的另一种技巧是编写自定义ActionLink帮助程序,检查当前登录用户的角色,如果用户处于角色,我将委托给标准ActionLink帮助程序,如果不是,我只返回一个空字符串。感谢您的时间。我刚刚在控制器中创建了一个“EmployeeController”。很好,请原谅我的天真问题,现在我如何重定向到区域Aboutus Views员工索引(非管理部分)或区域Admin Views员工索引(管理部分)。我见过您使用redirecttoaction(Actionname?),但我不确定是否可以转到其中任何一个them@user231465,如果员工控制员不在该区域,则意味着其观点也应遵守这些约定。为什么要重定向到关于我们查看员工索引的
    区域以及从何处开始?