我正在从数据库中的引用表中提取值列表,并使用 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 但我收到此错误:
值不能为空。参数名称:来源
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.ArgumentNullException:值不能为空。参数名称:来源
源错误:
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 时尝试初始化对象,但它不起作用。有任何想法吗?
在此先感谢您的帮助!