2010-07-25 58 views
0

什麼是更好的方式獲取和張貼不同的模型只有一個視圖。MVC one view and different models

例如,我有一組控件,每個控件都有自己的模型。我想根據條件在一個視圖中加載它們。然後在帖子上,我想從這個視圖中檢索值。

有什麼更好的做法呢?

回答

0

創建一個複合視圖模型,將每個單獨的模型公開爲屬性。

+0

非常有趣。任何例子? – Juk 2010-07-25 08:28:47

+0

是的看到我的例子(我稱它爲人造,但複合可能是一個更好的名字) – jao 2010-07-25 08:31:44

+0

@Jao我明白了。 只有一個模型,其中屬性表示我想要在該視圖上顯示的所有部分模型。 謝謝! – Juk 2010-07-25 08:39:40

1

嘿,如果我正確地理解你的問題,這裏是我會做什麼:

創建你需要爲了能夠從「主」的觀點稱他們爲不同型號的局部視圖。 然後,通過模型的ViewData的,每當你需要渲染的部分做到以下幾點:

<%Html.RenderPartial("PartialViewName", ViewData["Model"]);%> 
+0

是的,我已經這樣做了。但是,爲了從這個部分獲得數據,我必須有隻接受特定模型(視圖中與當前部分相關的模型女巫)的關聯動作。在這種情況下,如果我有N個部分,我必須創建N個HttpPost動作。看起來有點笨重的做法。 – Juk 2010-07-25 08:26:25

+1

這是真的,但在我看來,你會保持模型的分離。所以每個模型都與其行爲結果相關聯。您可以重複使用模型和操作結果。 在複合模型的情況下,您仍然需要這樣做來保持分離,但是您將引入一個人造物體 – sTodorov 2010-07-25 08:36:48

3

我創建了一個仿真模型是這樣的:

public class CustomerViewData { 
    public Customer customer { get; set; } 
    public Ticket ticket { get; set; } 
    public Decimal price { get; set; } 
} 

在你的控制器,你叫CustomerViewData和用你需要的數據填充你的視圖:

CustomerViewData.Customer = _customerRepository.GetCustomerById(1); 

然後你將CustomerViewData傳遞給你的視圖。在你看來,你添加

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyNamespace.Models.CustomerViewData>" %> 

現在,您可以撥打<%= Model.Customer.Name %>顯示客戶的名字(因爲你的客戶對象有一個名稱屬性)。

(以上只是一個例子,實際的內容當然可能更合理)。