2017-07-18 71 views
0

我知道有很多類似的帖子,但我似乎無法找到答案,經過大量調查。在回發之後,儘管將文本放入TextBoxFor字段並單擊submit,但CompanySetting.NewSetting.SettingType和CompanySetting.NewSetting.SettingValue爲null。 這是爲什麼?MVC模型中的對象屬性爲空

這裏是視圖:

@model Project.Models.CompanySettingView 
@using (Html.BeginForm()) 
       { 
     @Html.AntiForgeryToken() 
     @Html.ValidationSummary(true) 
     <form> 
      <div class="form-group"> 
      <label>Setting Type</label> 
      @Html.TextBoxFor(m => m.NewSetting.SettingType, new { @class = "form-control", @id = "SettingType" }) 

      <br /> 

      <label>Setting Value</label> 
      @Html.TextBoxFor(m => m.NewSetting.SettingValue, new { @class = "form-control", @id = "SettingValue" }) 

      <br /> 
      </div> 
      <div style="float: right;"> 
      <button type="button" style="width:100px;" onclick="ClearFields()" class="btn btn-default">Clear</button> 
      <button type="submit" style="width:100px;" class="btn btn-primary">Submit</button> 
      </div> 
     </form> 
       } 

接收控制器:

[HttpPost] 
public ActionResult AddCompanySetting(CompanySettingView model) 
{ 
... 
} 

CompanySettingView類別:

public class CompanySettingView 
{ 
    public List<CompanySetting> Settings = new List<CompanySetting>(); 
    public CompanySetting NewSetting = new CompanySetting(); 
} 

CompanySetting類別:

public class CompanySetting 
{ 
    public int CompanySettingId { get; set; } 
    public int CompanyId { get; set; } 
    public string SettingType { get; set; } 
    public string SettingValue { get; set; } 
} 
+1

最有可能嵌套對象引用做(' NewSetting.SettingType')。你可能應該多一些你的viewmodel。 – Hintham

+2

它與你的對象初始化器在CompanySettingView中做。將它們更改爲屬性並在構造函數中初始化它們(確保該類具有默認構造函數),並且'CompanySettingView'中的所有內容都應該是黃金 – Slicksim

+0

爲什麼不'set'和'get'以使其更簡單 – jamiedanq

回答

2

回答評論

它與你的對象初始化器在CompanySettingView中做。改變那些性能和在構造函數初始化它們(確保類有一個默認的構造函數)和所有應金色

事情是這樣的:

public class CompanySettingView 
{ 
    public List<CompanySetting> Settings { get; set; } 
    public CompanySetting NewSetting { get; set; } 

    public CompanySettingView() 
    { 
     this.Settings = new List<CompanySetting>(); 
     this.NewSetting = new CompanySetting(); 
    } 
} 
+0

同樣感謝您指出MVC modelbinder將只使用輸入的名稱,但不會使用id。 –