我想在我正在处理的MVC应用程序中对我的视图执行字段验证。例如 -
我使用以下内容来限制字段长度:
<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,希望获得服务器错误,因为它是必需的。但是,它会保存空白的公司名称。什么可能遗漏的想法?
答案 0 :(得分:3)
这是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)
以查看抛出的错误消息。
阅读文章,它可以更好地解释这一点,然后其他任何人都会。
答案 1 :(得分:3)
只需像这样创建一个ViewModel对象:
class Company
{
[Required]
[StringLength(40)]
[RegularExpression(@"someregexhere")]
public string CompanyName { get; set; }
}
将View绑定到该模型。通过这种方式,您将同时拥有服务器端和客户端验证。这真的很容易。
@model Company
@using (Html.BeginForm()) {
Html.EditorFor(x => x.CompanyName)
<input type="submit" value="Save" />
}
哦,这个例子使用Razor(MVC3),据我所知,顺便说一下MVC2的工作方式几乎相同。
然后通过检查ModelState.IsValid来验证控制器中传入的ViewModel。