当我在下拉列表中选择一个模板并按 OK 按钮发布一个表单时,将创建 DeleteTemplateListViewModel 对象并用当前的 templateId 填充,并且 ModelState 是有效的。
当我在下拉列表中选择默认值“选择模板”并按 OK 按钮以发布表单时,将创建 DeleteTemplateListViewModel 对象并且 ModelState 为 InValid。
到目前为止,一切都很好。
但是,当我将删除操作更改为接受一个作为 selectedTemplateId 的整数时,ModelState 对选定的 templateId 有效。当我选择 DropDownListFor 中定义的默认值“选择模板”时,我在输出窗口中出现此异常:
System.Web.Mvc.dll 中出现“System.ArgumentException”类型的第一次机会异常
如何使用整数作为操作参数而不是 viewModel ,以便 ModelState 对于默认值是 false/Invalid ?
@model ITMS.Web.Models.DeleteTemplateListViewModel
@using (Html.BeginForm("Delete", "Template"))
{
@Html.ValidationSummary(false)
@Html.DropDownListFor(x => x.SelectedTemplateId,
new SelectList(Model.DisplayList, "TemplateId", "Name"),
"Select a template",
new { @class = "listviewmodel" })
}
public class DeleteTemplateListViewModel
{
[Required(ErrorMessage = "No template selected.")]
public int SelectedTemplateId { get; set; }
public string Name { get; set; }
public IEnumerable<TemplateViewModel> DisplayList { get; set; }
}
作品
[HttpPost]
public ActionResult Delete(DeleteTemplateListViewModel viewModel)
{
if (ModelState.IsValid)
{
int templateId = viewModel.SelectedTemplateId;
_templateDataProvider.DeleteTemplate(templateId);
return new JsonNetResult(new { success = true, templateId = templateId });
}
return LoadDeleteTemplates();
}
不工作
[HttpPost]
public ActionResult Delete(int selectedTemplateId)
{
if (ModelState.IsValid)
{
_templateDataProvider.DeleteTemplate(selectedTemplateId);
return new JsonNetResult(new { success = true, templateId = selectedTemplateId});
}
return LoadDeleteTemplates();
}