编辑:我正在尝试让内置的“编辑器”助手正常工作。我不想重新实现这些帮助程序(或者它们“免费”提供的客户端验证)。我正在寻找一种解决方案,理想情况下,我可以通过添加一些额外的数据注释,甚至升级一些标准库来实现我想要的目标。
假设我有一个带整数字段的实体,如下所示:
class Foo
{
// ...
public int Price { get; set; }
// ...
}
现在假设在网络表单中,我使用EditorFor(m => m.Price)
。在当前版本的MVC中,这将呈现<input type="number">
HTML标记,在现代浏览器上将显示向上/向下控件。好到目前为止。
但是,如果用户在控件中输入“x”并单击“提交”,则显示的错误消息似乎错误:“价格字段是必需的。”
注意:如果字段可以为空,则情况会更糟 - 在这种情况下,它会默默地丢弃“x”并将字段视为空。育!的
如果我尝试使用[RegularExpression]
属性阻止无效数字,除非该字段已包含有效数字(!),否则它似乎不会测试正则表达式。
我的正则表达式为^\d*\.?\d*$
,不允许使用减号。 “x”没有显示错误,但“-1”显示错误。
有没有办法改善这种情况(特别是在可空字段的情况下)?
答案 0 :(得分:0)
在我的控制器中,我使用此
[...]
if (string.IsNullOrEmpty(model.Price))
{
ModelState.AddModelError("Error", "Insert a value");
return View(model);
}
if (Regex.Matches(model.Price , @"^[a-zA-Z]+$").Count > 0)
{
ModelState.AddModelError("Error", "Non numeric value");
return View(model);
}
[...]
或者您可以选择不可为空的选项
[Required]
在你的模型中,然后在正则表达式之前加上一个if
if(!ModelState.isValid){ [...] }
答案 1 :(得分:0)
一种可能性是在视图中为按下或键入的键添加一个JavaScript事件监听器,并将其绑定到编辑器元素。
然后,您可以使用该事件侦听器来丢弃或撤消非数字或相关字符(如“ - ”,“。”)的键击。或','取决于您的本地化。你甚至可以加入一点逻辑,这样它只允许' - ',如果它是第一个字符。