当前位置:编程学习 > C#/ASP.NET >>

MVC架构下,如何进行常规的g表单验证(用户输入的数据)

我知道在MVC3可以创建一个model,为属性添加象[required]之类的特性,在render时,会自动设置验证。
在服务端也可以调用modelstate审查表单核验结果。

可是,通常运用是比较自定义的,举个例子:
一个登录入口,有:
用户名,密码
两个文本输入,那这时,他不是一完整的model输入,我该如何做验证呢。
在web form架构下,我为这两个文本输入框分别设置require控件,然后在服务端调用page.isvalidate属性,即可知道表单是否验证通过。

可是,在MVC怎么实现呢,不可能为了这个还有去创建一个只有用户名,密码的model吧?

请教指导,谢谢! --------------------编程问答-------------------- 一样,不是完整的例子,也可以验证的,他是上面有多少就验证多少,
没有的属性,是不会验证的 --------------------编程问答-------------------- 你这个问题我也遇到过
包括使用在调用时使用[Bind(Exclude = "Id")]之流试图不去绑定这个参数,也不好使

你的方法,建议直接遍历ModelState的键值,只查你需要验证的属性是true还是false
大致的代码如下


internal bool IsModelError(ModelStateDictionary ModelState,IEnumerable<string> Fields)
 {
            foreach (var field in Fields)
            {
                if (ModelState[field].Errors.Count > 0) return false;
            }
            return true;
}
--------------------编程问答-------------------- 扩展一下也挺好用。完整代码如下


public static bool ValidateFields(this ModelStateDictionary msd, IEnumerable<string> needValidateFields)
    {
        foreach (var field in needValidateFields) 
        {
            if (msd.Keys.Contains(field))
            {
                if (msd[field].Errors.Count > 0) return false;
            }
        } 
        return true;
    }




调用示例

 if (ModelState.ValidateFields(new string[]{"Name","Password"}))
            {
                db.User.AddObject(user);
                db.SaveChanges();
                Message("已成功提交。");
            }

--------------------编程问答-------------------- 哎,你太依赖asp.net组件了。之前没写过asp、php的直接上手就是。net的一般都会这样。

一个合法性验证,还需要什么require控件、page.isvalidate属性……

js直接写嘛~什么长度、不可空、数字字母组合什么的,js判断一下嘛。

随带说下js判断完了c#也得判断下,不合法就返回嘛。

c#不仅判断合法性,再跟数据库做对比,是否存在该用户,是否密码正确之类的。 --------------------编程问答--------------------
引用 4 楼 woodyy 的回复:
哎,你太依赖asp.net组件了。之前没写过asp、php的直接上手就是。net的一般都会这样。

一个合法性验证,还需要什么require控件、page.isvalidate属性……

js直接写嘛~什么长度、不可空、数字字母组合什么的,js判断一下嘛。

随带说下js判断完了c#也得判断下,不合法就返回嘛。

c#不仅判断合法性,再跟数据库做对比,是否……


感谢关注,可能我还停留在WEB FORM阶段那种便捷开发观念。
从这个常见的问题,本来在WEB FORM是很简单的事情,现在要改变了,貌似变得有点小复杂,一时有点接受不了,哈哈。 --------------------编程问答-------------------- 我自己知道两个解决方法,第一个办法是在服务端使用modelstate.remove 移除isvalid=false的属性。
第二个就是在Model里设定属性的默认值

供参考
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,