내 컨트롤러에서 데이터베이스 기능 (IUnitOfWork
이 내 서비스 계층에 전달됨)에 대한 컨트롤러 작업에 사용되는 IUnitOfWork
개체 (IoC에서 생성 됨)를 전달합니다. 내보기 중 하나에서 T4MVC가 Html.ActionLink에서 컨트롤러 작업을 실행하려고하는 이유는 무엇입니까?
/Company/View/<id>
에 대한 링크를 제공 할, 그래서 나는 다음과 같은 전화 :
<li>@Html.ActionLink(company.Name, MVC.Company.View(company.Id))</li>
이것은 Company
컨트롤러에서하지만 다른에서보기에서하지 호출되는 제어 장치. 문제는 MVC.Company.View(company.Id)
이 실제로 CompanyController.View(id)
메서드 자체를 호출하는 것으로 보입니다. 이것은 두 가지 이유로 나쁘다. CompanyController
의 비 매개 변수가없는 생성자가 호출되지 않습니다 이후
1), 더 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))
이 DB 호출을 트리거하지 않아야합니다. 과도한 데이터베이스 호출은 전혀 이득이되지 않습니다.
T4MVC가 이러한 방식으로 작동하도록 만들어진 이유가 있습니까?
편집 : 여기 내가 위의 코드와 함께이 문제를 repro 수 할 수 아니에요의 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; }
}
실제로 귀하의 실제 작업은 호출되지 않아야합니다. 회사 컨트롤러의 모양과 조치 방법에 대한 자세한 내용을 제공해 주시겠습니까? impl 세부 사항은 필요 없지만 선언 만하면됩니다. –
컨트롤러에 사용 된 컨트롤러, 생성자 및 동작 선언을 추가했습니다. 당신이 뭔가 다른 것을 알았다면 알려주세요. 나는 그것을 업데이트 할 것입니다. 감사! – KallDrexx
조치에 메소드 이름이 누락되었습니다. 또한 MyCustomBaseController 및 해당 생성자를 포함 할 수 있습니까? 내 목표는 작은 응용 프로그램에서 볼 수있는 것을 재현 할 수있게하는 것입니다. –