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;
}
调用示例
--------------------编程问答-------------------- 哎,你太依赖asp.net组件了。之前没写过asp、php的直接上手就是。net的一般都会这样。
if (ModelState.ValidateFields(new string[]{"Name","Password"}))
{
db.User.AddObject(user);
db.SaveChanges();
Message("已成功提交。");
}
一个合法性验证,还需要什么require控件、page.isvalidate属性……
js直接写嘛~什么长度、不可空、数字字母组合什么的,js判断一下嘛。
随带说下js判断完了c#也得判断下,不合法就返回嘛。
c#不仅判断合法性,再跟数据库做对比,是否存在该用户,是否密码正确之类的。 --------------------编程问答--------------------
感谢关注,可能我还停留在WEB FORM阶段那种便捷开发观念。
从这个常见的问题,本来在WEB FORM是很简单的事情,现在要改变了,貌似变得有点小复杂,一时有点接受不了,哈哈。 --------------------编程问答-------------------- 我自己知道两个解决方法,第一个办法是在服务端使用modelstate.remove 移除isvalid=false的属性。
第二个就是在Model里设定属性的默认值
供参考
补充:.NET技术 , ASP.NET