我有一个“邮政编码”文本框,为了在我的数据库中正确插入,它需要在中间有一个空格,即“N18 2JY”。
有没有办法可以验证/检查用户是否正确输入了邮政编码,并在错误时给出错误信息?
提前致谢:)
答案 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。