2011-08-29 207 views
1

趕在MVC3剃刀:嵌套對象控制器

我試圖創建一個表單,動態,使用領域從多個對象。但出於某種原因,我在控制器中獲得的數據不包含輸入值。

FormViewModel.cs

namespace DynamicForm.Models 
    { 
     public class FormViewModel 
     { 
      public Name name = new Name(); 
      public Address address = new Address(); 

      public FormViewModel() 
      { 
      } 
     } 

public class Name 
    { 
     [Required()] 
     public String first { get; set; } 
     [Required()] 
     public String last { get; set; } 

     public Name() 
     { 
      first = ""; 
      last = ""; 
     } 
    } 
    public class Address 
    { 
     public String street1 { get; set; } 
     public String street2 { get; set; } 

     public Address() 
     { 
      street1 = ""; 
      street2 = ""; 
     } 
    } 

    } 

FormController.cs

[HttpPost()] 
     public ActionResult Save(FormViewModel toSave) 
     { 
      return View(); 
     } 

index.cshtml:

@using DynamicForm; 
@using DynamicForm.Models; 
@model FormViewModel 

@{ 
    ViewBag.Title = "Form"; 
} 

<h2>Form</h2> 

    @using (Html.BeginForm("Save", "Form")) 
    { 
     @Html.TextBoxFor(m => m.address.street1) 
     @Html.TextBoxFor(m => m.address.street2) 

     @Html.TextBoxFor(m => m.name.first) 
     @Html.TextBoxFor(m => m.name.last) 

     <input type="submit" value="Send" /> 
    } 

任何想法,爲什麼數據不被填充到FormViewModel目的?

回答

5

在您的FormViewModel中,名稱和地址應該是屬性。 The default model binder only works on properties

public class FormViewModel 
{ 
    public Name Name {get;set;} 
    public Address Address {get;set;} 
} 
+0

我做了這個改變,它的工作,但現在我有另一個問題。我創建了自定義幫助程序,以便構建表單輸入控件並保留我的數據註釋並創建數據驅動的表單視圖。這解決了如果我使用TextBoxFor的控件的問題,但不是如果我使用我自己的助手(http://stackoverflow.com/questions/7208911/dynamically-call-textboxfor-with-reflection)。任何想法爲什麼在這裏使用反射會失去我的數據?如果我沒有嵌套數據並直接捕獲其中一個對象,它仍然可以工作。 IE:公共ActionResult保存(名稱toSave)與我的幫手獲取名稱信息。 – KenEucker

+0

我現在意識到爲什麼它不起作用,那是因爲我的反射不在我傳遞它的對象之上。我想要完成的事情可能是不可能的...... – KenEucker