2017-07-18 17 views
0

これに似たたくさんの投稿がありますが、多くの調査の後で答えを見つけることができないようです。ポストバック時に、CompanyBoxing.NewSetting.SettingTypeおよびCompanySetting.NewSetting.SettingValueは、TextBoxForフィールドにテキストを入力してサブミットするにもかかわらず、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')。おそらくあなたのビューモデルをもう少し平坦化するべきでしょう。 – Hintham

+2

は、CompanySettingViewのオブジェクト初期化子と関係します。それらをプロパティに変更してコンストラクタで初期化してください(クラスにデフォルトのコンストラクタがあることを確認してください)、すべてが 'CompanySettingView'にゴールデン – Slicksim

+0

である必要があります。 – 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モデルバインダーでは、入力の名前だけでなく、IDは使用しないことを指摘してくれてありがとう。 –

関連する問題