如果我执行以下操作
视图模型:
public class ToleranceInput{
public decimal Tolerance{get;set;}
}
在我看来
AssignTolerances.cshtml
@model ToleranceInput
@using (@Html.BeginForm("AssignTolerances", Tolerances", FormMethod.Post, new {@class="form-horizontal"}))
{
@Html.ValidationSummary()
@Html.Partial("_AssignOrEditTolerances", Model)
<div class="form-actions">
<button type="submit">
<i class="icon-ok icon-white"></i> Save
</button>
</div>
}
_AssignOrEditTolerances.cshtml:
@model ToleranceInput
@Html.TextBoxFor(a=>a.Tolerance)
@Html.ValidationMessageFor(a=>a.Tolerance)
标准MVC验证工作正常。当我输入字母(而不是数字)时,它会显示一条红色错误消息。但是,在viewmodel中,如果我将Tolerance更改为可空decimal?
,则它无法正常工作。如果我输入一个非小数,例如&#39; asdf&#39;在文本框中,当我点击保存按钮时,我看到红色验证消息的快速闪烁,但随后POST通过并且我的控制器中的[HttpPost] AssignTolerances
方法被执行。为什么会这样?有什么想法吗?
编辑:我刚刚找到以下链接。看起来字符串被转换为空值并且变通方法看起来很糟糕:Integer validation against non-required attributes in MVC
答案 0 :(得分:0)
您是否还考虑过在控制器操作中添加检查?
[HttpPost]
public ActionResult TestPost(ToleranceInput model)
{
if(!ModelState.IsValid)
{
return View(model);
}
}
然后只需在模型中添加验证,例如[Required]属性