asp.net mvc 中模型验证如何处理数组呢?
我做了一个批量删除,不想用html.checkbox,它生成隐藏域,但这里我用不到.所以直接写了html标签的checkbox,模型中我把他写成数组类型,控制器中直接接收...
我做了一个批量删除,不想用html.checkbox, 它生成隐藏域, 但这里我用不到. 所以直接写了html标签的checkbox , 模型中我把他写成数组类型,控制器中直接接收。
模型如:
public string[ ] Ck {get; set;}
现在传值获取都没问题,但就是验证我不会写,似乎没办法在模型中对数组的每一项验证啊。
我想验证要求此数组里每一个都是数字.
我不想把验证写在控制器里,请问怎么办啊 展开
模型如:
public string[ ] Ck {get; set;}
现在传值获取都没问题,但就是验证我不会写,似乎没办法在模型中对数组的每一项验证啊。
我想验证要求此数组里每一个都是数字.
我不想把验证写在控制器里,请问怎么办啊 展开
展开全部
如果我没有理解错楼主的题意的话,楼主应该有这样一个model:
public class Tgghfbf // 楼主很有修改的名字
{
[EachIsNumberInStringArray] // 这个特性的定义将会在下面出现
public string[] Ck { get; set; }
}
然后是楼主要POST的表单:
@using (Html.BeginForm())
{
<input type="checkbox" name="Tgghfbf.Ck" value="1" />
<input type="checkbox" name="Tgghfbf.Ck" value="2tgghfbf" />
<input type="checkbox" name="Tgghfbf.Ck" value="3" />
<input type="submit" value="submit" />
}
楼主想做的是,以一种比较“优雅”的方式来验证用户对check box们的勾选,而这优雅的方式还确实比较多(搜Self-validating Models、Validation Provider),现只以楼上所说的为例:
如楼上所说,定义一个验证特性(可以是应用于模型的,也可以是应用于模型的属性的,此处我定义的是应用于模型属性的,若要了解应用于模型的验证特性,请搜索asp.net mvc model validation attribute),下面是此特性的代码:
public class EachIsNumberInStringArray : ValidationAttribute
{
public override bool IsValid(object value) // 模型绑定时,这个方法会被调用
{
if (value == null) // 如果用户没有勾选任何check box,那么也认为他/她输入的全是数字
{ // 可根据你的业务需求来修改
return true;
}
string[] _value = value as string[]; // 我们操作的是字符串数组
foreach (var item in _value)
{
Regex regex = new Regex(@"^\d*$"); // 希望我的正则表达式没有写错
if (!regex.IsMatch(item)) // 如果用户勾选了非数字的ckeck box,
{ // 那么返回false,让model binder注册验证错误信息
return false;
}
}
return true; // 如果什么都没有发生,当然高兴地返回true了。。
}
}
自定义验证特性完毕,如刚开始所说,这个特性修饰需要被验证的模型属性就行了。
剩下的是用以测试的action,如下:
[HttpPost]
public ActionResult Index(Tgghfbf tgghfbf)
{
if (ModelState.IsValid)
{
return Content("Each is a number");
}
else
{
return Content("One or more is/are not a number");
}
}
如果不明白的话,请补充问题,希望我能帮到你。
如果这对你有帮助话,请将此标为最佳答案,谢谢。
public class Tgghfbf // 楼主很有修改的名字
{
[EachIsNumberInStringArray] // 这个特性的定义将会在下面出现
public string[] Ck { get; set; }
}
然后是楼主要POST的表单:
@using (Html.BeginForm())
{
<input type="checkbox" name="Tgghfbf.Ck" value="1" />
<input type="checkbox" name="Tgghfbf.Ck" value="2tgghfbf" />
<input type="checkbox" name="Tgghfbf.Ck" value="3" />
<input type="submit" value="submit" />
}
楼主想做的是,以一种比较“优雅”的方式来验证用户对check box们的勾选,而这优雅的方式还确实比较多(搜Self-validating Models、Validation Provider),现只以楼上所说的为例:
如楼上所说,定义一个验证特性(可以是应用于模型的,也可以是应用于模型的属性的,此处我定义的是应用于模型属性的,若要了解应用于模型的验证特性,请搜索asp.net mvc model validation attribute),下面是此特性的代码:
public class EachIsNumberInStringArray : ValidationAttribute
{
public override bool IsValid(object value) // 模型绑定时,这个方法会被调用
{
if (value == null) // 如果用户没有勾选任何check box,那么也认为他/她输入的全是数字
{ // 可根据你的业务需求来修改
return true;
}
string[] _value = value as string[]; // 我们操作的是字符串数组
foreach (var item in _value)
{
Regex regex = new Regex(@"^\d*$"); // 希望我的正则表达式没有写错
if (!regex.IsMatch(item)) // 如果用户勾选了非数字的ckeck box,
{ // 那么返回false,让model binder注册验证错误信息
return false;
}
}
return true; // 如果什么都没有发生,当然高兴地返回true了。。
}
}
自定义验证特性完毕,如刚开始所说,这个特性修饰需要被验证的模型属性就行了。
剩下的是用以测试的action,如下:
[HttpPost]
public ActionResult Index(Tgghfbf tgghfbf)
{
if (ModelState.IsValid)
{
return Content("Each is a number");
}
else
{
return Content("One or more is/are not a number");
}
}
如果不明白的话,请补充问题,希望我能帮到你。
如果这对你有帮助话,请将此标为最佳答案,谢谢。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询