2012-09-01 64 views
0

我做的ASP.NET MVC項目,我有如下嵌套模型:asp.net的MVC嵌套模型返回空值

public class A 
......... 

public class B 
............. 

public class AB 
{ 
    public A _a; 
    public B _b; 
    public AB() 
    { 
    _a = new A(); 
    _b = new B(); 
    } 
} 

和控制器:

public ActionResult Create() 
{ 
    AB model = new AB(); 
    return View(model); 
} 

[HttpPost] 
public ActionResult Create(AB abModel) 
{ 
    //all properties of abModel._a and abModel._b are null 
    return View(abModel); 
} 

我視圖是AB模型類的強類型視圖,我不知道爲什麼所有回發值都是null,這隻發生在嵌套模型上。我錯過了什麼嗎?

謝謝你幫我

更新模型@rene提出

public class AB 
{ 
    public A _a {get; set}; 
    public B _b {get; set}; 
    public AB() 
    { 
    _a = new A(); 
    _b = new B(); 
    } 
} 

查看代碼:

@model TestMVC.AB  
    @{ 
     ViewBag.Title = "Create"; 
    } 
    @using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
     <table cellspacing="0" cellpadding="0" class="forms"> 

     <tbody> 
       <tr><th> 
      @Html.LabelFor(model => model._a.ClientName) 
     </th> 
     <td> 
      @Html.TextBoxFor(model => model._a.ClientName, new { @class = "inputbox"}) 
      @Html.ValidationMessageFor(model => model._a.ClientName) 
     </td></tr> 
     <tr><th></th><td><input type="submit" value="Create" /></td></tr> 
     </tbody></table> 

    } 

回答

2

MVC模型綁定只結合屬性不是字段。這種模式對我的作品在MVC3與控制器和視圖

改變你的模型類,如下所示:

public class A 
{ 
    public string ClientName { get; set; } 
} 

public class B 
{ 
    public string Address { get; set; } 
} 

public class AB 
{ 
    public A _a { get; set;} 
    public B _b { get; set; } 
} 
+0

我試過,但沒有工作:( – davidcoder

+0

你能添加視圖的HTML標記? – rene

+0

我更新的觀點,你要求 – davidcoder

1

對於模型的粘結劑要追上他們,他們需要HTML表單作爲子屬性上被命名爲。取決於您構建視圖的方式,它們可能不會自動生成。檢查您的形式

<input name="_a.descendant"> 

如果您的孩子屬性有模板,它們不會自動使用,它可能是必要的:

@{ Html.RenderPartial("Template_A", Model._a, new ViewDataDictionary { 
    TemplateInfo = new System.Web.Mvc.TemplateInfo { 
     HtmlFieldPrefix = "_a" 
    } 
});} 
+0

我所有的屬性都用前綴「_a」或「_b」 – davidcoder