因为下拉框不支持验证,所以写一个attribute特性,让它继承ValidationAttribute
mvc的特性验证,很直接,无论是数据安全特性上还是页面表现上都不错,
它的运行机制: 前台表单验证规则有个名称,然后前台js有对这个规则编写的代码,用来控制前台html标记的显示,而后台主要是生成验证规则和向前台参数赋值的,
mvc的验证不是简单的后台验证,一般继承到了 jquery.validate.min.js里

第一步 写后台验证规则,可能需要这样

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public sealed class NotDefaultValueAttribute : ValidationAttribute, IClientValidatable
{
public string InputString { get; set; }
public NotDefaultValueAttribute()
{
ErrorMessage = "请选其中一项";
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
ModelClientValidationRule rule = new ModelClientValidationRule
{
ValidationType = "notdefaultvalue",
ErrorMessage = FormatErrorMessage(metadata.GetDisplayName())
};
rule.ValidationParameters["inputstring"] = InputString; yield return rule;//按需取值
}
public override bool IsValid(object value)
{
if (value == null)
return true;
string inputString = (string)value;
if (inputString.Contains(InputString))
{
return false;
}
return true;
}
}

第二步在model层加上验证:

[NotDefaultValue(InputString = "")]/*如果用户选择为1,则验证不通过*/
public IList<SelectListItem> ActiveCategories { get; set; }

第三步 在前台添加相应的js代码:

<script>
$.validator.addMethod('notdefaultvalue', function (value, element, param) {
if (value == false) {
return true;
}
if (value.indexOf(param) != -) {
return false;
}
else {
return true;
}
});
$.validator.unobtrusive.adapters.addSingleVal('notdefaultvalue', 'inputstring');
</script>

最新文章

  1. 现代3D图形编程学习-基础简介(3)-什么是opengl (译)
  2. ASP DropDownList部分选项无法触发回传问题
  3. 互联网中一些常用指标(PV、UV、蹦失率、转换率、退出率)
  4. 【转载】 Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
  5. javascript平时小例子⑥(简易计算器的制作)
  6. Appium移动自动化测试(三)--安装Android模拟器
  7. mysql数据库---同时插入两个表以上的数据
  8. FPGA 设计技巧
  9. C# 类型运算符重载在类继承中的调用测试
  10. Symfony2学习笔记之HTTP Cache
  11. ThinkPHP CURD方法盘点:data方法
  12. [Git] Automatically running tests before commits with ghooks
  13. IM与工作信息流整合
  14. MyBatis+Spring+Spring MVC整合开发
  15. Android学习路径(十)如何将Action Bar堆放在布局
  16. RecyclerView用法
  17. php学习笔记upset函数。
  18. 用SpringCloud进行微服务架构演进
  19. js对HTML字符转义与反转义
  20. CSS的插入和选择器介绍

热门文章

  1. boost库的使用(一)
  2. Spark的几种运行模式
  3. ARM-Linux驱动-触摸屏驱动分析
  4. Exception in thread &quot;main&quot; java.lang.IllegalArgumentException:解决方法
  5. HW3.12
  6. Java NIO 缓冲技术详解
  7. 教程-Delphi源代码--后延函数
  8. jquery 模块拖拽
  9. eclipse调试的基本意义
  10. CSS3 keyframes动画实现弹跳效果