2008-09-22 120 views
1

以下代碼是在/Courses/Detail動作:MVC預覽5 - 的ViewData/HTML輔助夸克

[AcceptVerbs("GET")] 
    public ActionResult Detail(int id) 
    { 
     ViewData["Title"] = "A View Title"; 
     return View(tmdc.GetCourseById(id)); 
    } 

tmdc.GetCourseById(id)該方法返回Course類型的實例爲視角。在查看我使用

<%= HTML.TextBox("Title")%> 

顯示Title屬性爲Course對象的值。而是文本框顯示字符串A View Title。這是正常的/預期的行爲?處理這個問題的最佳方法是什麼?

更新
作爲一種變通方法,我已經改變了ViewData["Title"]ViewData["VIEW_TITLE"]但想一個更清潔的方式來處理這種衝突,或者知道這是預期的結果。

回答

1

不幸的是,我現在不在我的開發機器,所以我無法測試這個,但你有沒有嘗試過這樣的事情?

<%= Html.TextBox("Title", ViewData.Model.Title) %> 
1

是的,該行爲是按設計。目的是你應該能夠顯示(在你的視圖中)無效的用戶輸入,這些用戶輸入永遠不會被指定爲模型類型實例的屬性。您可以在this blog post中閱讀有關此功能的更多信息。

您的解決方法很好,但確實突出顯示了擁塞視圖名稱空間的問題。請記住,除了您的模型和ViewData的屬性之外,還有TempData,ModelState和HTML內容。

如果您總是希望顯示模型屬性「標題」,那麼您可能希望使用HTML.TextBox重載之一,該重載接受文字值而不是屬性名稱。

+0

感謝您的幫助克雷格...我忘了與TempData和其他人可能的衝突。 – mwilkes 2008-09-22 17:09:04