2009-08-20 41 views
8

其中一個新功能ASP.NET MVC 2預覽版是編輯模板的概念,並顯示模板,讓你可以支持預先定義給定對象將如何呈現的顯示或編輯用一個簡單的HTML助手呼籲:ASP.NET MVC 2 - 當使用模板VS何時使用局部視圖

<%=Html.EditorFor(customer => customer) %> 
<%=Html.DisplayFor(customer => customer) %> 

這是很酷,但我實在不明白這和部分觀點有異曲同工之妙的區別。此外,在示例中,我看到「編輯器模板」不包含實際的表單標記,並且如果需要爲給定編輯器提供某些客戶端功能(例如通過jQuery),我無法安全地將該代碼放入模板,因爲我不會在客戶端添加邏輯的表單上有一個靜態句柄。在我正在處理的應用程序中,我使用編輯模板和部分視圖的混合編輯內容。根據表單的複雜性,我創建了一個編輯器,因爲我選擇了另一種方法,但是這當然會給應用程序增加不希望的不一致程度。

爲什麼要使用模板在局部視圖或反之亦然?此外,使用編輯器模板時,將編輯器添加客戶端邏輯而不將其複製到使用該編輯器的每個視圖中的理想方式是什麼?

回答

3

ScottGu解釋了他blogpost about MVC V2一些這方面。

從我所收集這會爲每個傳遞給助手對象的屬性創建投入。所以,如果你有對象:

public class Customer 
{ 
    public string Name { get; set; } 
    [UIHint("MyCoolCalendar")] 
    public DateTime CoolDate { get; set; } 
} 

然後創建一個編輯:

<%= Html.EditorFor(customer => customer) %> 

這將產生對客戶的名稱的文本輸入,以及一個MyCoolCalendar(這是一個customdefined控制)對於CoolDate而無需編寫自定義控件來包裝整個對象。它會自動從屬性的類型/ uihint推導出控件的類型。至少這是我沒有時間去測試它的理解。

+0

我看了谷先生的職位,並解釋說,EditorFor既可用於個人領域和全對象使用。我指的是上述情況中的後一種情況。 – 2009-08-20 20:38:18

+0

噢好吧。他在帖子中說明了這一點的目的:「默認情況下,它會遍歷對象的公共屬性並生成一個元素,併爲它找到的每個屬性生成任何適當的驗證消息。」所以它會自動爲對象的所有屬性生成輸入。在對象上,您可以在屬性上設置UIHints以使用特定屬性的自定義控件。我會稍微更新我的答案。 – Runeborg 2009-08-20 22:14:27

+0

所以說,當我調用EditorFor(SomeObject)時,我不需要顯式定義模板,只要不需要像處理自定義字段那樣執行任何特殊操作即可。 – 2009-08-20 23:57:03

0

下面是我發現工作得很好的一個例子。

比方說,你有一個有一個地址一個客戶。您無法爲新客戶創建地址,但通過關聯,您可以讓對象客戶擁有一個字段地址。

然後,在爲客戶的「創建」方法調用Html.EditorFor(c => c.Address);(您可以創建爲您的網站需要自定義模板),將產生完全填充地址對象,它可以客戶之前保存,從而解決了依賴。

現在,當你有參考的數據,如國家列表或美國,或什麼的,它也許最好只使用局部視圖來渲染它,而不是與協會打擾。

希望這有助於

-vlad

相關問題