【问题标题】:MVC Foolproof Validation RequiredIfFalse returning error incorrectlyMVC 万无一失的验证RequiredIfFalse 错误地返回错误
【发布时间】:2014-10-10 14:10:46
【问题描述】:

我正在使用 MVC Foolproof Validation 库来提出相关要求:

public bool IsRequired { get; set; }
[RequiredIfTrue("IsRequired", ErrorMessage = "This field is required")]
public int RequiredIfTrueSelectID { get; set; }

这在客户端完美运行,允许我提交没有 RequiredIfTrueSelectID 值(即值为 0)的表单,但在 [HttpPost] 上,ModelState.IsValid 返回 false,并在以下结果中即时窗口:

myViewModel.IsRequired 
   true
ModelState["RequiredIfTrueSelectID"].Errors[0]
  {System.Web.Mvc.ModelError}
    ErrorMessage: "A value is required."
    Exception: null

我确保我正在回发RequiredIfTrueSelectID 的值(如您在上面的第一个即时窗口查询中所见)。为什么我会收到“需要 A 值”消息,如何抑制此错误?

顺便说一句,我在 MVC5 中。自 2 年前 Foolproof 上次更新以来,ModelState 的实现可能发生了变化?有其他人知道最近发布的功能类似于 Foolproof 的库吗?

控制器方法:

[HttpPost]
public virtual ActionResult ValidationTest(TestViewModel vm)
{ //breakpoint here to check ModelState.IsValid
    return View(vm); 
}

【问题讨论】:

  • 您是否从实际发布的值手动更改 AllowAnyPlan 的值?
  • @ErikFunkenbusch 没有。我在控制器方法的左大括号处设置断点
  • @ErikFunkenbusch 我什至尝试将AllowAnyPlan 改为只读为true,但它仍然会发生
  • 我发现如果我重新触发验证 ModelState.Clear(); ValidateModel(myViewModel); 它可以正常工作,所以现在这是一种解决方法,但我不想每次都调用它
  • 什么是ValidateModel?你是说更新模型吗?

标签: c# asp.net-mvc foolproof-validation


【解决方案1】:

哦,呵呵。您的字段是值类型。

值类型始终是必需的。如果您希望它是可选的,则需要使该类型可以为空。

请注意,错误消息与验证器中使用的错误消息不同,这是第一个线索。

【讨论】:

  • 啊,这就解释了!我还是 MVC 的新手,所以我对此一无所知。将其更改为 int? 并将值初始化为 0 可以得到我需要的结果。虽然我必须在所有内容中添加一些?? 回到ints,但这没关系。谢谢!
  • 其实这给了我一个问题。该值现在将null 作为默认值,这会在回发后破坏我的下拉列表中的绑定。我在模型构造函数中将值初始化为 0,但在回发后它被设置为null,所以我的下拉列表没有显示任何内容,而不是下拉列表中的第一项。有什么见解吗?
  • @DLeh - 0 满足要求,你不能有一个值并使用 required.. 所以如果你的代码需要有一个值,但你希望这个值是可选的,你有一个两难弄清楚。听起来你真正想要的是“如果为真则为零”而不是“如果为真则需要”
  • 我想我希望“如果为假则允许零”或“如果为真则禁止零”。此外,由于我在下拉列表中使用它,因此 0 似乎不能满足要求。这就是我想要的,有条件的。
  • 无论如何,我可以在下拉列表中检测null 值并将其替换为javascript 为0。我怀疑“允许或禁止零”是否可以实现。再次感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
相关资源
最近更新 更多