これに似たたくさんの投稿がありますが、多くの調査の後で答えを見つけることができないようです。ポストバック時に、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; }
}
ここ
は図であります
ネストされたオブジェクト参照を行う可能性が最も高いです( ' NewSetting.SettingType')。おそらくあなたのビューモデルをもう少し平坦化するべきでしょう。 – Hintham
は、CompanySettingViewのオブジェクト初期化子と関係します。それらをプロパティに変更してコンストラクタで初期化してください(クラスにデフォルトのコンストラクタがあることを確認してください)、すべてが 'CompanySettingView'にゴールデン – Slicksim
である必要があります。 – jamiedanq