【问题标题】:Field Validations in MVCMVC 中的字段验证
【发布时间】:2012-05-17 14:33:01
【问题描述】:

我想在我正在处理的 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; }

为了测试,我尝试保存一个空白的 CompanyName,希望得到一个服务器错误,因为它是必需的。但是,它会保存空白的公司名称。有什么想法可能会丢失吗?

【问题讨论】:

标签: c# javascript jquery asp.net-mvc


【解决方案1】:

这是 MVC 2.0,但同样适用于 3.0 http://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)

为了查看被抛出的错误信息。

阅读这篇文章,它可以更好地解释这一点。

【讨论】:

【解决方案2】:

只需像这样创建一个 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。

【讨论】:

  • 需要使用 System.ComponentModel.DataAnnotations 添加;我真的建议完全阅读我发布的文章。它将让您全面了解如何在 MVC 中进行验证。
  • 谢谢。请参阅上面对我的 Q 的编辑。它似乎没有工作
  • 你先检查 ModelState.IsValid 了吗?它应该设置为 false(因为您违反了 Required 约束,因此导致模型状态无效)。在你的控制器中,你当然会收到填充的 ViewModel。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 2011-08-29
  • 2021-06-02
  • 2011-01-01
  • 1970-01-01
相关资源
最近更新 更多