[asp.net-mvc]FluentValidation 选择列表值

发布时间: 2017/3/25 11:36:23
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

如何验证选择列表值为 0?

我用过以下

RuleFor(x => x.ProductId).Equal(0).WithMessage(required);
RuleFor(x => x.ProductId).NotEqual(0).WithMessage(required);
RuleFor(x => x.ProductId).GreaterThan(0).WithMessage(required);
RuleFor(x => x.ProductId).GreaterThan(0).When(x => x.ProductId < 1).WithMessage(required);
//etc.

我选择的列表的值为 '0' 为 '选择......。 如果我在我的窗体中选择该值,要么 ModelState.IsValid 抛出的错误 (不预期范围),或如果我注释掉 ModelState.IsValid 的值为 0 获取过帐到 db。 无论哪种方式不发生任何验证。 所有我其他字段的字符串、 int 和布尔值的混合很好地工作和正确验证。

注: 产品 id 是我的模型和视图模型中的 int。

失去了。

解决方法 1:

我解决了问题。 这是我希望我永远不会问一个问题。 解决的办法是一部喜剧的错误但尽管如此大家我发现一路走来。

简短的答案是︰

RuleFor(x => x.ProductId).GreaterThan(0).WithMessage(required);

问题是在我的控制器和 (足够尴尬) 我的看法。

  1. 我忘了添加我的 validationmessagefor 产品 id。 但这并不会完全解决问题。
  2. 我的控制器是这个样子的。

[HttpPost]
public ActionResult Update(ProductModel model)
{
  if(!ModelState.IsValid)
      throw new ArgumentExpection();
//etc.
}

我最初的测试我的模型来处理 Automapper 和一旦我实施验证我忘了删除 ArgumentException。

这却是什么永远不会给我验证规则光的一天。 当然它从不验证因为控制器被告知要抛出一个错误而不是 post ModelState 关于回实际验证错误。Dohhh !

[HttpPost]
public ActionResult Update(ProductModel model)
{
  if(!ModelState.IsValid)
     return View(model);//pssst! the validation error is in here.
//etc.
}

令事情更好的理解现在了 希望这有助于别人谁是哑的正如我。

赞助商