在我的控制器中,我傳入一個IUnitOfWork
對象(由IoC生成),然後用於數據庫功能的控制器操作(將IUnitOfWork
傳遞給我的服務層)。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)
方法本身。這有兩個原因是不好的。
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; }
}
你實際上的行爲永遠不會被調用。您能否提供關於您公司控制器的外觀和操作方法的更多細節?我不需要impl的細節,只需要聲明。 – 2011-03-22 06:53:50
我已經添加了在此使用的控制器,構造函數和動作聲明。如果你的意思是別的,請告訴我,我會更新它。謝謝! – KallDrexx 2011-03-22 12:28:02
似乎您錯過了操作中的方法名稱。另外,你可以包含MyCustomBaseController及其構造函數嗎?我的目標是能夠複製您在小應用中看到的內容。 – 2011-03-22 15:09:55