MVC2验证 - “需要一个值”

时间:2009-12-14 01:59:00

标签: asp.net-mvc

我有一个视图模型有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()));
        }

3 个答案:

答案 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