2012-04-03 46 views
0

這是我的情況:我的應用程序中有許多專門的對象類型,我遵循標準約定在/Shared/DisplayTemplates文件夾中使用自定義模板顯示它們,並使用/Shared/EditorTemplates中的模板編輯它們。但我也希望能夠爲每種類型顯示自定義過濾器模板,所以我想添加一個/Shared/FilterTemplates文件夾,並實施我自己的@Html.FilterFor方法,以便顯示過濾器模板就像顯示一個顯示或編輯器模板。什麼是ASP.NET MVC中自定義模板類型的正確設計模式?

這似乎是處理這種情況的最佳方式,還是有更正確/優雅的方式在MVC中做到這一點?提前致謝。

+0

什麼是FilterTemplate? – 2012-04-03 15:31:48

+0

假設你有一個Id字段。顯示模板將其顯示在標籤中,編輯器模板將其顯示在文本框中。過濾器模板將顯示一個自定義用戶界面,例如顯示兩個文本框「From」和「To」,以允許您指定一系列用於過濾行的Id值,僅獲取Id在這個範圍內。對於所有其他字段和數據類型也是如此。或者,也許名稱字段會顯示一個文本框,並讓您指定通配符或正則表達式模式,以便您可以找到名稱與該模式匹配的行。 – 2012-04-03 15:41:39

+0

您的解決方案有什麼問題我認爲這是一種正確的方式來編寫您的自定義模板 – 2012-04-03 15:43:29

回答

1

當數據被髮送回服務器時,我總是使用EditorTemplates。我假設用戶可以將過濾器提交給服務器以執行實際的過濾。

當創建過濾器我喜歡爲過濾器創建一個模型,如:

public class UserListFilterModel 
{ 
    public string Username { get; set; } 
    public bool IsEnabled { get; set; } 
} 

爲UserListFilterModel視圖進入EditorTemplates/UserListFilterModel.ascx。

然後將其作爲屬性添加到我的視圖模型中。

public class MyPageViewModel 
{ 
    public UserListFilterModel Filter { get; set; } 
} 

然後我過濾模型添加到模型的頁面,並顯示如下:

<%= Html.EditorFor(x => x.Filter)%> 

你可能會包裹過濾器的形式,以允許用戶提交的值,因此我認爲它屬於EditorTemplates。用戶實際上正在編輯過濾器模型。

(如果你真的想將它們分開荷蘭國際集團則可以使用UIHintAttribute,但我不會)

編輯:我加了一些示例代碼。

+0

謝謝,這幫助我澄清了我需要做的事情。你是對的,這不是說有一種獨立的模板,而是有一種獨立的ViewModel,它反過來被顯示或編輯。 – 2012-04-03 18:33:24

0

我想你誤解了模板的工作方式。模板在您描述的上下文中沒有意義。

模板工作在數據項目(儘管該數據項目可以包含多個數據項目,它們又有自己的模板)。

過濾器的概念是控制多個數據項,因此它們不能很好地映射到模板。

你可以做的是爲你的集合類創建一個DisplayTemplate,添加過濾,因此不需要創建一個自定義類型的模板。只需使用DisplayTemplates。