В моих контроллерах я передаю объект 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)
. Это плохо по 2 причинам.
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; }
}
RouteLink
. Если это сработает, дайте мне знать, и я напишу это как ответ. - person George Stocker   schedule 23.03.2011RouteLink
по-прежнему вызывает вызовCompanyController.View()
- person KallDrexx   schedule 23.03.2011