![](/img/trans.png)
[英]Render Another Controllers View From Within a Controller (Not Partial View)
[英]Render a partial view from another controller
我知道類似的問題已經問過很多次了,答案是使用絕對路徑訪問所討論的視圖。 但是,它仍使用當前控制器(而不是部分視圖所屬的控制器)進行渲染。
我的目標是將特定模型的下拉列表視為獨立組件,以便具有該模型外鍵的其他模型可以重用該列表。 例如,假設我有兩個模型: Device
和DeviceType
。 Device
包含一個DeviceTypeId
字段,該字段在編輯模板中將顯示為一個下拉列表,其中包含所有可用DeviceTypes
的名稱。
通常,您必須將模型和設備類型列表包裝在單獨的DeviceViewModel
類中,並在呈現頁面之前讓控制器同時填充兩者。 然后,您可以使用類似以下內容的模板:
<div class="editor-field">
@Html.DropDownListFor(model => model.Device.DeviceTypeId, Model.AllDeviceTypes)
@Html.ValidationMessageFor(model => model.Device.DeviceTypeId)
</div>
我不喜歡這種解決方案-對於每個模型,我都必須創建一個匹配的視圖模型,其中包括下拉列表的查找表。 這也意味着DevicesController
必須知道如何獲取DeviceTypes
列表,這似乎是DeviceTypesController
應該做的工作。 理想情況下,我想在DeviceTypesController
上定義一個局部視圖,該視圖填充並呈現一個下拉列表,然后所有其他視圖可以僅包含該視圖:
<div class="editor-field">
<!-- Somehow make the DeviceTypesController render the partial here -->
@Html.ValidationMessageFor(model => model.DeviceTypeId)
</div>
這可能嗎?
您可以使用RenderAction
:
@{Html.RenderAction("TemplateMethod","DeviceTypes");}
從以下文章中: http : //www.dotnettricks.com/learn/mvc/renderpartial-vs-renderaction-vs-partial-vs-action-in-mvc-razor
當局部視圖中的顯示數據獨立於相應的視圖模型時,RenderAction方法很有用。例如:在一個博客中,每個頁面都顯示類別列表,我們希望使用RenderAction方法,因為類別列表由不同的模型。
@{Html.RenderAction("Category","Home");}
當您要緩存部分視圖時,此方法是最佳選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.