我有一个“邮政编码”文本框,为了让它在我的数据库中正确插入,它需要在中间有一个空格,即“N18 2JY”。
有没有一种方法可以验证/检查用户是否正确输入了邮政编码并在丢失时给出错误消息?
提前致谢 :)
我有一个“邮政编码”文本框,为了让它在我的数据库中正确插入,它需要在中间有一个空格,即“N18 2JY”。
有没有一种方法可以验证/检查用户是否正确输入了邮政编码并在丢失时给出错误消息?
提前致谢 :)
您可以使用不显眼的验证来做到这一点,如果可能的话,这将允许在客户端执行验证,如果绕过客户端验证,也可以在服务器端执行。简而言之,您需要向视图模型添加一个或多个验证属性:
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>
@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。
尝试使用正则表达式验证器控件来生成正则表达式 go here。