MVC 中的字段验证

Field Validations in MVC

本文关键字:验证 字段 MVC      更新时间:2023-09-26

我想在我正在处理的 MVC 应用程序中对我的视图强制执行字段验证。例如-

  • 将字段的长度限制为 40
  • 确保只有字母数字和特殊字符 @#$%&*((-_+][';:?.,!可以输入。

我使用了以下内容来限制字段长度:

<div>
<%= Html.TextBoxFor(c => c.CompanyName, new { style = "width:300px", maxlength = "40" })%></div>

如何确保文本框中只能输入字母数字和特殊字符?

编辑:我将模型中的属性更改为

        [DataMember(EmitDefaultValue = false)]
        [Required(ErrorMessage="CompanyName is Required")]
        [StringLength(40, ErrorMessage = "Must be under 40 characters")]
        public string CompanyName { get; set; }

为了进行测试,我尝试保存一个空白的公司名称,希望得到服务器错误,因为它是必需的。但是,它会保存空白的公司名称。任何想法可能缺少什么?

这是 MVC 2.0,但也适用于 3.0http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

只需查看数据注释,并进行一些模型验证

编辑:

您的控制器操作将需要类似的东西

if(ModelState.IsValid)
{
//success logic
}
//failure logic
//return to view

您还需要

@Html.ErrorMessageFor(model => model.YourProperty)

为了查看抛出的错误消息。

阅读这篇文章,它比其他任何人都能更好地解释这一点。

只需创建一个像这样的 ViewModel 对象:

class Company
{
    [Required]
    [StringLength(40)]
    [RegularExpression(@"someregexhere")]
    public string CompanyName { get; set; }
}

并将您的视图绑定到该模型。这样,您将同时进行服务器端和客户端验证。这真的很容易。

@model Company
@using (Html.BeginForm()) {
    Html.EditorFor(x => x.CompanyName)
    <input type="submit" value="Save" />
}

哦,这个例子使用Razor(MVC3(,顺便说一句,据我所知,MVC2的工作方式几乎相同。

然后,只需通过检查 ModelState.IsValid,在控制器中验证传入的 ViewModel。