【发布时间】:2015-12-01 04:20:42
【问题描述】:
我正在学习使用 MVC 和代码优先实体框架(使用 razor)的 ASP.NET。我一直在发现很多关于该主题的相互矛盾的信息,我想我会求助于 SO 社区来尝试澄清一些事情。
从模型到控制器再到视图,访问逻辑应该放在哪里?例如(为这篇文章简化):
public class EmployeeController : Controller
{
private Repo _repo;
[HttpGet]
public ActionResult Create(int id)
{
Business business = _repo.FindBusiness(id);
if (CurrentUser.UserId == business.GeneralManager.UserId ||
CurrentUser.Father.UserId == business.Owner.UserId)
{
Employee employee = new Employee();
employee.Business = business;
return View();
}
}
[HttpPost]
public ActionResult Create(Employee employee)
{
Business business = _repo.FindBusiness(employee.business.ID);
if (CurrentUser.UserId == business.GeneralManager.UserId ||
CurrentUser.Father.UserId == business.Owner.UserId)
{
_repo.Save(employee);
Return Redirect(...);
}
}
}
然后,如果当前用户是企业的总经理或者他的父亲拥有该场所,那么我希望当前用户能够创建新企业。我在这里要指出的是,它不依赖于用户的角色,而是依赖于他们为什么可以采取行动的一些业务逻辑。
同样,我希望能够基于相同的条件在视图中显示或隐藏链接,例如:
...
@if (CurrentUser.UserId == business.GeneralManager.UserId ||
CurrentUser.Father.UserId == business.Owner.UserId)
{
@Html.ActionLink(...)
}
...
我绝对不想这样做。我的问题是:如果可以将访问逻辑捆绑为单个方法,那么该方法在 mvc 中“属于”哪里?它应该是 ViewModel 的只读属性吗?应该有一些静态访问控制器吗?模型本身的一部分?感谢您的关注!
【问题讨论】:
标签: asp.net asp.net-mvc razor