例如,我有一個帶屬性Title(string)和Valid(bool)的模型X.我需要在具有不同字段標籤和輸入控件的兩個單獨頁面上顯示相同的模型。 例如「標題」爲標題,「有效」爲有效的一種形式,而「目的地」爲標題,「返回」爲有效。什麼是ASP.NET MVC 2以兩種不同方式表示相同模型的方式
我想最簡單的方法是對同一模型有兩個不同的視圖。但是它真的是一種MVC方式嗎?
謝謝
例如,我有一個帶屬性Title(string)和Valid(bool)的模型X.我需要在具有不同字段標籤和輸入控件的兩個單獨頁面上顯示相同的模型。 例如「標題」爲標題,「有效」爲有效的一種形式,而「目的地」爲標題,「返回」爲有效。什麼是ASP.NET MVC 2以兩種不同方式表示相同模型的方式
我想最簡單的方法是對同一模型有兩個不同的視圖。但是它真的是一種MVC方式嗎?
謝謝
好吧,假設您有一些名爲List的視圖文件夾,另一個名爲Details--並且在兩者中顯示模型應該是不同的。
您可以在兩個文件夾中的每一個文件夾中創建一個DisplayTemplates文件夾,並使用同名作爲您的模型創建一個PartialControl,並將其強制鍵入到您的模型中。
在你不同的觀點,你就可以做<%= Html.DisplayFor(your model) %>
,或者您也可以使用常規的<% Html.RenderParital("NameOfPartial", ModelX); %>
編輯 要儘量接近原來的問題,也許這可以幫助你以某種方式(我張貼此作爲回答不同的問題How to change [DisplayName「xxx」] in Controller?)
public class MyDisplayName : DisplayNameAttribute
{
public int DbId { get; set; }
public MyDisplayName(int DbId)
{
this.DbId = DbId;
}
public override string DisplayName
{
get
{
// Do some db-lookup to retrieve the name
return "Some string from DBLookup";
}
}
}
public class TestModel
{
[MyDisplayName(2)]
public string MyTextField { get; set; }
}
也許你可以重寫自定義屬性做一些基於邏輯的名稱選擇,而這種方式使用相同的PartialView兩個模型的差來項?
是的,這就是我實施這個的方式。但是,讓我提出這個問題的是,我使用數據註釋的可能性以及它給我的魅力。我希望有人會爲我的一個觀點闡述使用某種中級課程。也許這是更復雜的,但MVC的方式來做這樣的事情? – Ramunas 2010-08-12 11:20:10
還有一件關於文件夾的事情。它不像在「列表」和「詳細信息」視圖中表示相同的模型,它更像是在Controller1/Edit/1和Controller2/Edit/2視圖中表示相同的模型。從技術上講,它是代表兩個不同業務實體的相同模型(如我的簡單示例中的產品和路由) – Ramunas 2010-08-12 11:29:02
坦率地說,我會爲兩個完全不同的實體對象使用相同的模型。如果您決定稍後使產品與路線略有不同,會發生什麼情況?您必須1.對兩者進行相同的更改 - 或 - 2.創建一個新模型,並在您使用Route for Product的任何位置更改代碼,反之亦然。正如你所說,你不想失去註釋的魅力,而且我完全同意 - 所以我沒有看到使用同一個模型用於兩個不同實體的優點。 – 2010-08-12 12:04:27
它真的是一模一樣嗎?
如果它們是兩個具有相似屬性的不同實體,那麼我會創建兩個單獨的視圖模型。任何通用性都可以放在抽象的基類或接口中。
如果它是相同的模型,但只是一個不同的輸入屏幕,然後確定,重用該模型。
我會想象第一個案例可能是這裏相關的案例。
是的,它與技術視圖是相同的模型。但同時從業務角度來看有兩種模式。是的,我知道這聽起來像垃圾,但就是這樣。 – Ramunas 2010-08-12 11:22:56
是的,兩個不同的視圖是適當的,因爲您提供了兩個不同的視圖模型。
但是,您確定您不會將數據鎖定到單個模型中嗎?實際上,它在每種情況下代表不同的實體?
請參閱我對Yngve B. Nilsen的回答的評論。是的,你是對的,我爲不同的實體使用了一個模型,但這是一年左右參與重構企業解決方案的唯一途徑。 – Ramunas 2010-08-12 11:37:23
在我的回答中敲擊了我的最後一條評論,因爲它顯然很難脫離單一模型的方法,讓我們看看我們是否可以找出解決方案。問題:你有什麼方法來區分這兩個模型的數據? – 2010-08-12 12:28:40
基本上可以。爲了保持我們的示例微不足道,假設模型X具有一個可能值爲1或2的更多屬性DataType(int)。 – Ramunas 2010-08-12 13:09:18