0

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

有没有一种方法可以验证/检查用户是否正确输入了邮政编码并在丢失时给出错误消息?

提前致谢 :)

4

3 回答 3

3

您可以使用不显眼的验证来做到这一点,如果可能的话,这将允许在客户端执行验证,如果绕过客户端验证,也可以在服务器端执行。简而言之,您需要向视图模型添加一个或多个验证属性:

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>
于 2013-08-02T09:16:16.107 回答
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 只允许 AZ 和间距。请记住,一个属性只允许一个 RegularExpressionAttribute。

于 2013-08-02T09:24:59.210 回答
0

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

于 2013-08-02T09:11:40.560 回答