MVC - 如何检查文本框中的空白区域

时间:2013-08-02 09:05:07

标签: c# asp.net-mvc

我有一个“邮政编码”文本框,为了在我的数据库中正确插入,它需要在中间有一个空格,即“N18 2JY”。

有没有办法可以验证/检查用户是否正确输入了邮政编码,并在错误时给出错误信息?

提前致谢:)

3 个答案:

答案 0 :(得分:2)

您可以使用unobtrusive validation执行此操作,如果可能,将允许在客户端执行验证,但如果绕过客户端验证,则允许在服务器端执行验证。简而言之,您需要向视图模型添加一个或多个验证属性:

class MyViewModel {

  [RegularExpression("[^ ]+ [^ ]+")]
  public String PostCode { get; set; }

}

然后在视图模型的视图中呈现帖子代码字段:

Html.EditorFor(model => model.PostCode)

在您提交表单时发布的操作中,您需要验证模型是否有效:

public ActionResult Save(MyViewModel viewModel) {
  if (!ModelState.IsValid)
    return View(viewModel);

  ... process a valid submission
}

您还需要在Web.config中启用不显眼的验证:

 <appSettings>
   <add key="ClientValidationEnabled" value="true"/> 
   <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
 </appSettings>

答案 1 :(得分:0)

尝试使用正则表达式验证器控件,以生成正则表达式here

答案 2 :(得分:0)

@Martin Liversage回答是MVC模式控制验证的更好答案。

如果您认为正则表达式非常常见,那么您可以覆盖下面的示例中的RegularExpressionAttribute: -

 public class AlphaSpaceAttribute : RegularExpressionAttribute, IClientValidatable
{
    public AlphaSpaceAttribute()
        : base(@"^([a-zA-Z ]*)\s*")
    {
    }
    public override string FormatErrorMessage(string name)
    {
        return Resources.UDynamics.EM_10003;
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRule
        {
            ErrorMessage = FormatErrorMessage(this.ErrorMessage),
            ValidationType = "regex",
        };
        rule.ValidationParameters.Add("pattern", @"^([a-zA-Z ]*)\s*");
        yield return rule;
    }


}

上面的代码我重写了RegularExpressionAttribute以仅允许A-Z和间距。请记住,一个属性只允许一个RegularExpressionAttribute。