2011-07-15 73 views
0

一些背景資料:如何處理拉姆達語句獲取數據值

這裏是我的會員用戶模型(取出多餘的東西):

public class Address { 
    public String Address1 { get; set; } 
    public String Address2 { get; set; } 
    public String City  { get; set; } 
    public String State { get; set; } 
    public String Zip  { get; set; } 
} 

public class MembershipUser { 
    public String LoginId { get; set; } 
    public String Password { get; set; } 

    [Display(Name = "Mailing Address")] 
    public Address MailingAddress { get; set; } 

    [Display(Name = "Physical Address")] 
    public Address PhysicalAddress { get; set; } 

    ... 
} 

我寫的HTML輔助方法輸出地址:

@ Html.Address(Model => Model.MailingAddress,Model => Model.MailingAddress.Address1,Model => Model.MailingAddress.Address2,Model => Model.MailingAddress.City,Model => Model .MailingAddress.State,Model => Model.MailingAddress.Zip)(模型=> Model.PhysicalAddress,Model => Model.PhysicalAddress.Address1,Model => Model.PhysicalAddress.Address2,Model => Model.PhysicalAddress.City,Model => Model.PhysicalAddress。);}}}}國家型號=> Model.PhysicalAddress.Zip)

當然必須有一些方法來調用這個是這樣的:

@ Html.Address(型號=> Model.MailingAddress)

@Html。地址(Model => Model.PhysicalAddress)

我必須承認我有n有了lambda表達式的那個「啊哈」時刻。我似乎無法將自己的思想包圍在他們身邊。我一直在網上搜索,但我不確定我在找什麼。任何提示,指針,命名,例子將不勝感激。

感謝您的幫助。

回答

0

在這種情況下,你會更好定義Editor or Display template而不是HTML輔助擴展,其中:

@Html.EditorFor(model => model) 

請記住,爲了簡單起見(忽略表達現在)模型=>模型位,特別是=>只是一個匿名委託的簡寫,它允許你的EditorFor實現回調並獲得你想要的模型對象(在你的情況下是Address)。

表達式變得稍微複雜一些,但最簡單的意義是讓您能夠打包委託並將其作爲「數據」傳遞。

+0

謝謝達斯 - 我把它變成了一個編輯器模板,似乎工作正常。再次感謝你的幫助。 – JConnell