2009-08-10 92 views
2

我試圖通過傳遞路徑列表我想要的部分景色,然後在每個呼叫的RenderPartial動態加載的局部視圖到視圖。這似乎有伎倆。當我嘗試將模型傳遞給局部視圖時,問題就出現了。由於我正在動態加載它們,因此我不完全知道要爲特定的局部視圖傳遞哪個模型。我不想填充每個可能的對象,我正在考慮對每個局部視圖使用反射和配置查找來動態加載模型。我也在考慮添加一個ActionFilter,它會自動爲我填充正確的模型值,但即使這個實現也必須使用Reflection。有沒有人有任何其他建議?MVC - 動態加載的局部視圖

有一件事我想念我不MVC看到常規ASP.NET用戶控件。用戶控件封裝了自己的數據檢索邏輯,而在MVC中,主控制器需要知道它。這意味着如果我要爲另一個控制器使用局部視圖,那麼該控制器也必須知道如何獲取該局部視圖的模型。我在這裏錯過了什麼嗎?謝謝。

回答

4

如果你想要做你的描述的能力,你可能有興趣閱讀Html.RenderAction()。這在許多情況下很有用,但不是「純粹的」MVC(也許是務實的MVC)。

我有類似的情況給你在那裏我使用局部視圖來加載不同的搜索屏幕(搜索提交按鈕都一樣),只是表單域是不同的。

我這樣做以下列方式。在通用基類控制器中,我有泛型類型參數,我將其傳遞給視圖模型對象(SearchObject是對象類型)。

public abstract class SampleController<T> : Controller where T : new() 
public virtual ActionResult SearchForDocuments() 
     { 
      searchModel.SearchObject = // Create type of T; 
      // Some more code 
      return View("SomeView", searchModel); 
     } 

然後我有一個強類型的視圖,它將SearchObject傳遞給局部視圖。

<% Html.RenderPartial(@"../Search/SearchCriteriaTemplates/" + /*Specific view name*/, Model.SearchObject); %> 

然後局部視圖是強類型的,並知道如何處理強類型模型。

+0

我已經看到你的代碼,但不理解流程。所以你會發佈一個小的完整工作示例代碼。謝謝 – Thomas 2015-11-30 08:50:32

1

創建具有邏輯和返回Partials as string可能會導致相同的輔助功能。並且將比RichardOD建議的虛擬功能更具可移植性。