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

时间:2011-06-17 12:46:01

标签: asp.net-mvc

学习mvc并构建一个完整的电子商务应用程序。

管理员应该能够添加任何他们喜欢的内容。

让我们举一个例子雇员。

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

现在在用户部分,用户不应该添加-edit.etc ..

在他们那一刻,我有2个控制器?

  1. 区 - 管理的控制器-EmployeeController
  2. 领域-公司简介的控制器-EmployeeController
  3. 这对我来说似乎不对。你怎么处理这样的代码重复? 我想只有一个控制器。在这种情况下你如何构建你的mvc应用程序?

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

    感谢任何建议

2 个答案:

答案 0 :(得分:1)

您可以使用单个~/Controllers/EmployeesController控制器来处理应用程序中的Employee资源。在此控制器中,需要管理(或某些登录用户)权限的操作可以使用[Authorize]属性进行修饰,方法是指定所需的角色以执行此操作:

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
}

答案 1 :(得分:1)

我正在尝试这样做,以便您可以使用身份验证并拥有漂亮的网址: /管理/员工 /公司简介/雇员

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

    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} _
    )