在我的控制器中,我传入一个IUnitOfWork
对象(从 IoC 生成),然后在控制器操作中用于数据库功能(IUnitOfWork
传递给我的服务层)。
在我的一种观点中,我想给出一个链接/Company/View/<id>
,所以我调用以下内容:
<li>@Html.ActionLink(company.Name, MVC.Company.View(company.Id))</li>
这不是从Company
控制器调用的,而是从不同控制器中的视图调用的。问题似乎是MVC.Company.View(company.Id)
似乎实际上是在调用CompanyController.View(id)
方法本身。这很糟糕,原因有两个。
1) 由于CompanyController
' 的非无参数构造函数从未被调用,因此不UnitOfWork
存在,因此当View(int id)
调用动作时,动作的数据库调用失败并带有NullReferenceException
。
2)即使IUnitOfWork
存在,我的视图也不应该触发数据库调用,以便生成我的链接。 Html.ActionLink(company.Name, "View", new { id = company.Id })
不会触发任何数据库调用(因为没有调用操作方法),所以就我而言tml.ActionLink(company.Name, MVC.Company.View(company.Id))
,也不应该触发任何数据库调用。这是过多的数据库调用绝对没有收获。
是否有任何理由创建 T4MVC 以这种方式运行?
编辑:这是 CompanyController 的声明
public partial class CompanyController : MyCustomBaseController
{
public CompanyController(IUnitOfWork unitOfWork)
{
}
public virtual ActionResult Add(int jobSearchId)
{
}
public virtual ActionResult Edit(int id)
{
}
[HttpPost]
public virtual ActionResult Edit(Company company, int jobSearchId)
{
}
public virtual ActionResult View(int id)
{
}
}
public class MyCustomBaseController: Controller
{
public MyCustomBaseController()
{
}
public int CurrentUserId { get; set; }
}