Asp.net MVC中关于剃须刀问题如何解决

  

Asp.net MVC中关于剃须刀问题如何解决?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

最近在学习Asp.net MVC剃须刀,在使用中遇到了不少的问题,所以想着总结下来,没有经验的童鞋就是这样磕磕碰碰出来的经验,话不多说,来一起看看详细的介绍:

这也许是Asp.net MVC的一个Bug.ViewModel中定义了数据类型为日期字段:

 & lt;输入name=癇irthDay"类=癴orm-control"id=癇irthDay"类型=皌ext"value=https://www.yisu.com/zixun/" " data-val-required="生日必须输入!”data-val=" true " data-val-date=弊侄紊毡匦胧侨掌凇?> 

所需的错误消息和定义的一样,而数据类型的消息却没有? ?既然数据类型有自定义消息的公开属性为啥不起作用?如果有知道的欢迎留言。

<强>解决方法:

通过Javascript在页面载荷的时候替换掉原来的消息。

(“# txtDesignatedDate")美元.attr (& # 39; data-val-date& # 39; & # 39;请输入一个日期像(2017/1/1)& # 39;);

剃刀模型绑定设置如下:

@Html。LabelFor (m=比;m。生日,新的{@class=癱ol-md-2 control-label"})   @Html。TextBoxFor (m=比;m。的生日,“{0:d-MMM-yy}“,新{@class=癴orm-control"})

边测试情况:显示日期不对的错误消息。

 Asp.net MVC中关于剃须刀问题如何解决

铬测试情况:居然没有错误提示! !

 Asp.net MVC中关于剃须刀问题如何解决

如果是英文以外同样格式的日期,都会显示日期不对错误消息。这到底怎么回事?

官网(http://jqueryvalidation.org/date-method/)其实也有说明:

 Asp.net MVC中关于剃须刀问题如何解决

翻看JS代码:

//http://docs.jquery.com/Plugins/Validation/Methods/date
  
  日期:功能(价值,元素){
  
  返回this.optional(元素)| | !/无效|南/2馐?新日期(值).toString ());
  
  },//http://docs.jquery.com/Plugins/Validation/Methods/dateISO
  
  dateISO:功能(价值,元素){
  
  返回this.optional(元素)| |/^ \ d {4} [\/\] \ d {1,2} [\/\] \ d {1,2} $/test(价值);
  
  },

dateISO也只支持yyyy-MM-dd或者yyyy/MM/dd格式的验证。没办法只能重写一个验证方法覆盖原来的。

<强>解决方法:

(函数($){
  
  .validator.methods美元。日期=function(值、元素){
  
  返回this.optional(元素)| | DateCheck(价值);
  
  }
  
  }(jQuery)); 

自定义一个DateCheck函数就可以了。

操作端设置:

返回视图(新RegisterViewModel{生日=DateTime。现在,城市BirthCity=I虾);

视图端设置:

@Html。DropDownListFor (m=比;m。BirthCity,新的SelectListItem [] {      新SelectListItem{文本=癑iangxi", https://www.yisu.com/zixun/Value=" 1 "},      新SelectListItem{文本="北京",Value=" 2 "},      新SelectListItem{文本=吧虾!?值=3},      新SelectListItem{文本="深圳" Value=" 4 "},      },{@class="表单控件"})

偶尔这样的设置无法选择行动中设置的选项,如果有知道原因的欢迎留言。

<强>解决方法:用SelectList替代SelectItem列表。

@Html。DropDownListFor (m=比;m。BirthCity,新的SelectList(新SelectListItem [] {      新SelectListItem{文本=癑iangxi", https://www.yisu.com/zixun/Value=" 1 "},      新SelectListItem{文本="北京",Value=" 2 "},      新SelectListItem{文本=吧虾!?值=3},      新SelectListItem{文本="深圳" Value=" 4 "},      },“价值”、“文本”Model.BirthCity),新{@class=氨淼タ丶眪)

<代码>自动完成=皁ff" 在Chrome58以后都无效了。这个是浏览器的问题没办法了。

<强>解决方法:强通过Javascript在提交之前将控件的残疾属性删除,提交完成之后再复原属禁用性。

Asp.net MVC中关于剃须刀问题如何解决