2011-05-04 75 views
7

我只是看看ASP.Net MVC3和一個自動生成的創建視圖,它使用「Html.EditorFor(model => model.User)」爲用戶提供一個文本框輸入他們的用戶名理想情況下,我會使用@ User.Identity.Name自動填充此項。如何自動填充Html.EditorFor在ASP.Net MVC3中的值?

什麼是實現這一目標的正確方法? Html.EditorFor允許我在視圖中自動填充它,還是應該在傳入時在控制器上設置它?

我發現,如果我改變這個控制器創建方法:

public ActionResult Create() 
    { 
     return View(); 
    } 

要這樣:

public ActionResult Create() 
    { 
     MyObject myobject = new MyObject(); 
     myobject.User = User.Identity.Name; 
     return View(myobject); 
    } 

這似乎是工作。這是做到這一點的正確方法嗎?

在此先感謝您確認我正在做這件事。

回答

4

絕對的,分配是好的。

+0

沒有涉及靜態類。 – 2011-05-04 13:21:54

+0

是 - '用戶'是。 – 2011-05-04 13:22:15

+0

不,它不是。它是控制器上的一個屬性,它是一個只有一個getter的'IPrincipal'。這個getter調用可以被模擬的HttpContext.User屬性。它不是靜態的。 – 2011-05-04 13:28:23

2

這絕對是正確的方法。您可以定義包含用戶字符串屬性的視圖模型(MyObject),然後讓您的控制器操作實例化並填充此模型,並最終將視圖模型傳遞給視圖以進行顯示。單元測試也很容易,因爲控制器上的User.Identity屬性是一個可能被嘲笑的抽象。

+0

非常好,謝謝。 – Darren 2011-05-04 14:49:08

1

在這種情況下,它是一個很好的方法,但是如果你創建一個大項目,最好創建一個全局模型類,在那裏你將放置所有模型,而不是控制器。

+0

謝謝。哪個位會進入全局模型類 - User.Identity.Name? – Darren 2011-05-04 14:50:49