我正在构建一个MVC 5应用程序,用于处理员工的日志记录时间等。我已经有一个完整的CRUD控制器,可以处理员工记录,并且我有一个时间表控制器用于输入员工时间。如何从多个地方使用MVC控制器
我想添加快捷方式到Timesheets/Index视图来访问Employees模块,而无需通过Admin/Index视图。我还想直接从下属视图中的员工编辑方法访问Timesheets/Index。
本着DRY的精神,我是否可以重用员工控制器逻辑并仍然回到我从哪里来,或者是否需要复制员工逻辑以用不同的操作链接调用不同的视图? (我知道我可以通过使用部分模板重用视图代码的一部分,但这并不够远)。
确定没有回答我没有做很好的解释我想要做的事情。下面是雇员控制器代码的一部分:
public partial class EmployeesController : Controller
{
//
// GET: /Employees/
public virtual ActionResult Index(int? page)
{
const int pageSize = 15;
var masterDataProxy = MasterDataChannelFactory.OpenChannel();
var employees = masterDataProxy.GetPagedEmployees((page ?? 0) * pageSize, pageSize);
masterDataProxy.CloseChannel();
ViewBag.HasPrevious = employees.HasPrevious;
ViewBag.HasMore = employees.HasNext;
ViewBag.CurrentPage = (page ?? 0);
return View(employees.Entities);
}
//
// GET: Employees/Edit/{id}
//[Authorize(Roles = "Admin")]
public virtual ActionResult Edit(int id)
{
var masterDataProxy = MasterDataChannelFactory.OpenChannel();
var employee = masterDataProxy.GetEmployee(id);
masterDataProxy.CloseChannel();
return View(employee);
}
//
// POST: Employees/Edit/{id}
[AcceptVerbs(HttpVerbs.Post), /*Authorize(Roles = "Admin")*/]
public virtual ActionResult Edit(int id, FormCollection formValues)
{
var masterDataProxy = MasterDataChannelFactory.OpenChannel();
var employee = masterDataProxy.GetEmployee(id);
masterDataProxy.CloseChannel();
if (null == employee)
{
return View(Views.NotFound);
}
try
{
UpdateModel(employee, formValues.ToValueProvider());
var adminProxy = AdminChannelFactory.OpenChannel();
adminProxy.AddUpdateEmployee(employee);
adminProxy.CloseChannel();
return RedirectToAction(Actions.Index());
}
catch (Exception ex)
{
ModelState.AddModelError("Employee", ex.Message);
return View(employee);
}
}
...
}
这里是管理索引页面视图的一部分:
@{
ViewBag.Title = "Master Data Admin";
}
<h2>Master Data</h2>
<ul>
<li>@Html.ActionLink("Accounts", MVC.Account.Actions.Index())</li>
<li>@Html.ActionLink("Employees", MVC.Employees.Actions.Index())</li>
</ul>
然后,我有一个时间表/索引视图,我想另一个ActionLink的增加雇员。我的问题是我怎么写这个,所以我可以从任一视图(Admin/Index或Timesheets/Index)调用Employees Controller,更新服务上的Employees,然后返回到我被调用的地方?
看来这应该是一个解决的问题,但我找不到任何接近我想要做的事情。也许我需要重述这个问题?我shoudl补充我是一个相对的新手MVC和网络编程一般...
在此先感谢您的任何帮助或指导。
戴夫
一些基本的代码在这里真的很有用。伪代码,如果需要的话。 –
发布员工控制器逻辑,也许逻辑应该在一个共同的类?控制器不应该有太多的代码。 – christiandev
可能将逻辑从您的控制器中取出并放入某种服务类别中。然后,您可以从任何需要它的控制器调用该逻辑,并且控制器可以以任何合理的方式呈现它。 –