Asp.net mvc 关于如何组织控制器asp.net mvc3的建议
学习mvc并构建全面的电子商务应用程序 管理员应该能够添加编辑他们喜欢的内容 让我们以员工为例 我添加了一个名为“Admin”的区域。在Admin中我有员工 在这里,管理员应该能够添加有关员工的编辑信息 现在在用户部分,用户应该不能添加编辑等 现在我有两个控制器Asp.net mvc 关于如何组织控制器asp.net mvc3的建议,asp.net-mvc,Asp.net 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,如果员工控制员不在该区域,则意味着其观点也应遵守这些约定。为什么要重定向到关于我们查看员工索引的区域以及从何处开始?