即使验证应该阻止它,ASP.NET MVC帖子仍然会通过

时间:2015-03-10 13:52:42

标签: asp.net-mvc-4

如果我执行以下操作

视图模型:

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>&nbsp;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

1 个答案:

答案 0 :(得分:0)

您是否还考虑过在控制器操作中添加检查?

[HttpPost]
public ActionResult TestPost(ToleranceInput model)
{
    if(!ModelState.IsValid)
    {
        return View(model);
    }
}

然后只需在模型中添加验证,例如[Required]属性

相关问题