2013-06-28 112 views
0

我在使用下面的模型創建一個Html幫助器時,我的視圖彈出了一個intellisense,但是我不知道你能做什麼。基本上我的模型如下有人可以解釋這個聲明是如何工作的?

public class Mainclass 
{ 
    public List<main> mainset { get; set; } 
// do sth to load and save model info 
} 
public class main 
{ 
    public personalinfo info { get; set; } 
    public addressinfo currentaddr { get; set; } 
    public addressinfo[] otheraddr { get; set; } 
    public telephone currenttel { get; set; } 
    public telephone[] othertel { get; set; } 
} 
public class personalinfo 
{ 
    public string Name { get; set; } 
    public string Surname { get; set; } 
    public string Ni { get; set; } 
    public string dob { get; set; } 
    public employer currentemployer { get; set; } //another class employer 
    public employer[] otheremployer { get; set; } //an array of employer class 
} 

什麼智能感知彈出是(型號=> m.info.Name)。

@if (Model.mainset != null){ 
     foreach (var m in Model.subset) 
     { 
      <div class="editor-label"> 
      @Html.LabelFor(model => m.info.Name) 
      </div> 
      <div class="editor-field"> 
      @Html.EditorFor(model => m.info.Name) 
      @Html.ValidationMessageFor(model => m.info.Name) 
      <div class="editor-label"> 
     } 

所以我想知道這個聲明是如何工作的?它會讓我直接在主模型中設置子域嗎?沒有幫助者或Ajax或JSON?

回答

2

這是一個拉姆達,它不像它看起來那麼神奇(無論如何,從高層次看)。

你最好從源頭上了解到:Lambda Expressions - MSDN C# Programming Guide

基本上,MVC,你使用的拉姆達的方法將配合該屬性到模型中,當您發佈的形式。

1

Lambda只是一個操作員。關鍵是ValidationMessageFor()EditorFor()函數。他們期望Func<T>參數是一個代表。使用lambda,您可以傳遞參數,這是您的代表簽名中的模型,在lambda運算符之後,您將編寫該方法的實現。所以,如果你擴展你的模型,你會在intellisense中看到新成員。

注意: 委託必須在使用之前實例化,但MVC框架在您創建強類型視圖時動態處理它。 Location of HtmlHelper instantiation for ASP.NET MVC

+0

這解釋了很多。謝謝。 –

1

爲了澄清,你不是問一般的lambda的問題,而是關於UNUSED這裏?

foreach (var item in Model.Items) 
{ 
    @Html.DisplayFor(UNUSED => item.Foo) 
} 

它的作品,因爲你確實通過了item.Foo的價值。 MVC幫助程序無法將其綁定到模型的屬性,因此您可以使用此表示法來顯示,但不能直接用於編輯控件。

相關問題