將額外數據傳遞給 EditorTemplate
假設我有一個 LineItem(來自過度使用的購物車範例),我想使用 EditorTemplate 呈現它。
我完全可以使用父視圖(部分或其他)中的 @Html.EditorFor(m => m.LineItems) 來渲染它,但令人困惑的是傳遞一些額外數據的最佳方法(比如具有數據的 SelectList來自數據庫)到模板。
顯然,我不應該通過添加這些無關的項目來污染 LineItem 模型(但是從視圖的角度來看這是必需的。)
在訴諸 ViewBag/ViewData 技巧之前,我試圖查看是否有一種強類型的方法來執行此操作。
我已經嘗試創建一個“LineItem”特定的視圖模型來傳遞數據,但它會破壞 MVC 生成的名稱並向集合添加一個額外的層(因為我將視圖模型的 IEnumerable<> 傳遞給 EditorFor( ) 呼叫,而不是實際 LineItem 的 IEnumerable<>)
另外,這是對 EditorTemplate 的錯誤使用嗎?LineItem 是否需要一個下拉菜單,其中包含來自數據庫表的選項對於 EditorTemplate 來說太多?
請引導我走向 MVC 必殺技。在等待答案的同時,我將嘗試其他想法!
澄清一下:我考慮使用 EditorTemplate 的原因是因為它為我提供了自動收集處理。否則整個
$$ id $$業務變得太粘。
我最近面臨同樣的問題並找到了這個解決方案。
總而言之,您應該創建包含原始集合和所需支持數據的自定義視圖模型。然後在呼叫自定義模板的視圖中,您可以使用
HtmlHelper擴展方法重載將支持數據傳遞給ViewData字典。然後,您可以從您的自定義模板中檢索並使用它們 frinViewData。我認為這是一個很好的解決方法,基本上這就是視圖模型的用途,至少它比擴展或從原始類派生來為視圖提供額外數據要好得多。
請讓我知道它是否適合您的場景或您是否找到任何其他解決方案。