我有一个视图模型有2个属性是可选的 - 即 - 不是必需的。该视图使用dropdownlistfor()来获取这两个字段的值,包括空白值的“”选项标签。
当回发给create动作时,ModelState对这两个字段都有一个错误,说“需要一个值”。
如果这是一个错误或愚蠢的用户(即我)错误,任何人都有任何线索?
由于
UDPATE:
View Model看起来像这样: [DisplayName(“校验数字类型”)] public VMBarcodeMaskCheckDigitType BarcodeMaskCheckDigitType { 得到; 组; }
[DisplayName("Mask Type")]
[Required(ErrorMessage="Mask type is required")]
public VMBarcodeMaskType BarcodeMaskType
{
get;
set;
}
[DisplayName("Product")]
public VMProduct Product
{
get;
set;
}
控制器中的绑定是:
public ActionResult Create()
{
BarcodeMaskViewModel model = new BarcodeMaskViewModel(new VMBarcodeMask(), Domain.GetBarcodeMaskTypes(), Domain.GetBarcodeCheckDigitTypes(), Domain.GetProducts());
return View(model);
}
//
// POST: /Barcode/Create
[HttpPost]
public ActionResult Create(BarcodeMaskViewModel model)
{
try
{
if (ModelState.IsValid)
{
...
}
}
catch (Exception ex)
{
ModelState.AddModelError("*", ex);
}
return View(new BarcodeMaskViewModel(model.BarcodeMask, Domain.GetBarcodeMaskTypes(), Domain.GetBarcodeCheckDigitTypes(), Domain.GetProducts()));
}
答案 0 :(得分:0)
我也遇到过这个问题,我发现它实际上与可选字段无关。 这是因为我有一个实体的自动生成主键列,称为“Id”。 MVC2自动检查了这个值,显然没有一个因为它是自动生成的。
有一种简单的方法可以解决这个问题,即将列重命名为BarcodeId等,而不仅仅是Id。我在这里给出了一个更好的解释:http://www.ediblecode.com/post/A-value-is-required-with-ASPNET-MVC-2.aspx
这个解释都假设你正在使用LINQ ...
答案 1 :(得分:0)
只需在创建操作的第一个参数之前使用Bind(Exclude =“Id”)。
答案 2 :(得分:0)
我认为这是一个确认的错误。见这里:http://forums.asp.net/p/1529205/3699143.aspx