2011-08-11 74 views
9

可以說我有一個LineItem(來自過度使用的購物車示例),我想使用EditorTemplate來渲染它。傳遞額外的數據給EditorTemplate

我完全可以從父視圖(部分或其他)使用@ Html.EditorFor(m => m.LineItems)來渲染它,但是混淆是最好的方法來傳遞一些額外的數據從數據庫進入數據的SelectList)到模板。

顯然,我不應該通過將這些多餘的物品污染的LineItem模型(其然而從視圖的角度來看需要。)

我想看看是否有訴諸之前這樣做的強類型的方式ViewBag/ViewData技巧。

我已經嘗試創建一個'LineItem'特定的視圖模型來傳遞數據,但它破壞了MVC生成的名稱和廣告一個額外的圖層集合(因爲我通過IEnumerable <> viewmodel到EditorFor()調用,而不是IEnumerable <>的實際LineItem)

此外,這是一個EditorTemplate的錯誤使用? LineItem是否需要下拉菜單,EditorTemplate的選項來自數據庫表格太多?

請引導我走向MVC涅v。當我等待答案時,我會嘗試其他想法!

澄清:我使用EditorTemplate考慮的原因是因爲它使我有自動收集處理。否則整個[id]業務變得太粘。

+0

你不能爲此使用ChildAction嗎? – alexn

+0

你從那以後解決過這個問題嗎? –

+0

兒童行爲不是創建輸入UI的最佳方式。我通過使用Steven Sanderson的方法(http://blog.stevensanderson.com/)的變體來呈現部分視圖列表來解決此問題。 – kidoman

回答

11

我最近面臨同樣的問題,發現this解決方案。

總結它,你應該創建自定義視圖模型包裝原始集合和所需的支持數據。然後在調用自定義模板的視圖中,可以使用HtmlHelper擴展方法重載將支持數據傳遞給ViewData字典。從您的自定義模板中,您可以檢索並使用它們frin ViewData

我覺得這是一個很好的解決方法,基本上這就是視圖模型被用於,至少它比延長或從原來的類派生只是提供了額外的視圖數據好過得多。

請讓我知道它是否適合您的情況,或者如果您找到任何其他解決方案。

+0

雖然我最終沒有EditorTemplates實現它,這是我將用於編輯器模板。 – kidoman

+0

謝謝,鏈接頁面很有用 –

+0

URL改變了......他們必須切換CMS: http://weblogs.asp.net/jongalloway//using-viewmodel-information-in-an-asp-net-mvc -2-主編或顯示模板 –

相關問題