データベースの参照テーブルから値のリストを取得し、CheckBoxListFor を使用してそれらを MVC4 ビューに表示しています。これで、初期ロード、検証、および選択した値をコントローラーにポストすることで、すべてが正常に機能します。私の問題は、何らかの理由でコントローラーが検証エラーをトリガーし、最初に投稿を開始したビューに戻った場合にのみ発生します。
私のビューモデル:
public class DetailsViewModel
{
public ICollection<GoodsType> GoodsType { get; set; }
public ICollection<GoodsType> SelectedGoodsType { get; set; }
public PostedGoodsType PostedGoodsType { get; set; }
public class PostedGoodsType
{
public string[] GoodsTypeIDs { get; set; }
}
}
私の見解:
<ul id="typeOfGoodsCheckBoxList" class="formList botDots twinCols clearfix">
@Html.CheckBoxListFor(model => model.PostedGoodsType.GoodsTypeIDs,
model => model.GoodsType,
entity => entity.GoodsTypeID,
entity => entity.GoodsTypeDesc,
model => model.SelectedGoodsType)
</ul>
私のコントローラー:
// This Action is loaded on the first request
public ActionResult DeclareDetails(int? declarationID = null)
{
return View(viewModel);
}
// This action is called on the submit
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SubmitDeclareDetails(DetailsViewModel viewModel)
{
var errors = new List<ValidationResult>();
// Validate ViewModel
var command = Mapper.Map<Declaration, CreateOrUpdateDeclarationCommand>(viewModel.Declaration);
errors = _commandBus.Validate(command).ToList();
// Add the custom errors to the modelstate
ModelState.AddModelErrors(errors);
if (ModelState.IsValid)
{
var result = _commandBus.Submit(command);
if (result.Success)
{
return RedirectToAction("DeclareVehicle", viewModel);
}
}
// If something went wrong, go back to the page and display the errors
return View("DeclareDetails", viewModel);
}
そして、検証エラーが発生し、ModelState.IsValid が false の場合、ViewModel を渡して最初のビューに戻りたいのですが、次のエラーが発生します。
値を null にすることはできません。パラメータ名: ソース
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.ArgumentNullException: 値を null にすることはできません。パラメータ名: ソース
ソース エラー:
Line 296: </legend>
Line 297: <ul id="typeOfGoodsCheckBoxList" class="formList botDots twinCols clearfix">
Line 298: @Html.CheckBoxListFor(model => model.PostedGoodsType.GoodsTypeIDs,
Line 299: model => model.GoodsType,
Line 300: entity => entity.GoodsTypeID,
ViewModel の作成時にオブジェクトの初期化を試みましたが、うまくいきませんでした。何か案は?
よろしくお願いします。