asp.net mvc 中模型验证如何处理数组呢?

我做了一个批量删除,不想用html.checkbox,它生成隐藏域,但这里我用不到.所以直接写了html标签的checkbox,模型中我把他写成数组类型,控制器中直接接收... 我做了一个批量删除,不想用html.checkbox, 它生成隐藏域, 但这里我用不到. 所以直接写了html标签的checkbox , 模型中我把他写成数组类型,控制器中直接接收。
模型如:
public string[ ] Ck {get; set;}
现在传值获取都没问题,但就是验证我不会写,似乎没办法在模型中对数组的每一项验证啊。
我想验证要求此数组里每一个都是数字.
我不想把验证写在控制器里,请问怎么办啊
展开
 我来答
无中生有何时明
2012-04-25 · TA获得超过510个赞
知道小有建树答主
回答量:145
采纳率:100%
帮助的人:87.8万
展开全部
如果我没有理解错楼主的题意的话,楼主应该有这样一个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");
}
}

如果不明白的话,请补充问题,希望我能帮到你。
如果这对你有帮助话,请将此标为最佳答案,谢谢。
tgghfbf2
2012-04-25
知道答主
回答量:2
采纳率:0%
帮助的人:2.7万
展开全部
自定义模型验证就可以了,或者远程验证 remote关键字 其实是远程调用一个验证
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式