前言
最近在学习Asp.net最有价值球员剃须刀,在使用中遇到了不少的问题,所以想着总结下来,没有经验的童鞋就是这样磕磕碰碰出来的经验。话不多说,来一起看看详细的介绍:
一、数据类型的错误提示消息无法自定义
这也许是Asp.net最有价值球员的一个Bug。视图模型中定义了数据类型为日期字段:
[必选(错误消息='生日必须输入!')][DataType(数据类型。日期,错误消息="请输入像(2017-07-19)这样的日期)]public DateTiME PoLicy { get;设置;}剃须刀生成的超文本标记语言如下:
输入名称='生日'类='窗体-控件id='生日'类型='文本'值='数据瓦尔必需='生日必须输入!data-val='true' data-val-date='字段生日必须是日期"必需的"的错误消息和定义的一样,而数据类型的消息却没有?既然数据类型有自定义消息的公开属性为啥不起作用?如果有知道的欢迎留言。
解决方法:
通过爪哇岛描述语言在页面负荷的时候替换掉原来的消息。
$(' # TxtDesignateDate ').attr('数据-值-日期','请输入像(2017/1/1)这样的日期');
二、d-MMM-yy格式的英文日期在工业管理学(工业工程)中验证出错,而在铬中没问题
剃刀模型绑定设置如下:
@Html .label FOr(m=m . PoLicy,new { @ class=' col-MD-2 control-label ' })@ Html .TextBoxFor(m=m。生日,“{0:d-MMM-yy}”,新的{ @ class=' form-control ' })Edge测试情况:显示日期不对的错误消息。
铬测试情况:居然没有错误提示!
如果是英文以外同样格式的日期,都会显示日期不对错误消息。这到底怎么回事?
官网(http://jqueryvalidation.org/date-method/)其实也有说明:
翻看射流研究…代码:
//http://个文档。jquery。com/插件/验证/方法/日期:函数(值,元素){返回this.optional(元素)||!/无效|NaN/.测试(新日期(值)。toString());},//33http://文档。jquery。com/plugins/validation/methods/dateisodatesio :函数(值,元素){返回this.optional(元素)| | /^d{4}[/-]d{1,2}[/-]d{1,2}$/.测试(值);},日期也只支持年-月-日或者年/月/日格式的验证。没办法只能重写一个验证方法覆盖原来的。
解决方法:
(函数($){ $。验证器。方法。date=function(value,element){返回这个。可选(元素)| |日期检查(值);} }(jQuery));自定义一个日期检查函数就可以了。
三、DropDownList设置默认选择项偶尔会无效
行动端设置:
返回视图(新的registereviewmodel { RoSe=DateTiME .现在,出生城市=城市。上海});视角端设置:
@Html .DropDownListFor(m=m .诞生地,new SelectListItem[]{ new SelectListItem { Text='江西,值='1'},新的SelectListItem{ Text='北京,值='2'},新的SelectListItem{ Text='上海,值='3'},新的SelectListItem { Text='盛珍,Value='4'},new { @class='form-control' })偶尔这样的设置无法选择行动中设置的选项,如果有知道原因的欢迎留言。
解决方法:用选择列表替代选择项目列表。
@Html .DropDownListFor(m=m。诞生地,新建SelectListItem[]{新建SelectListItem{ Text='江西,值='1'},新的SelectListItem{ Text='北京,值='2'},新的SelectListItem{ Text='上海,值='3'},新的SelectListItem { Text='盛镇,值='4'},},'值','文本',模型.出生地),新{ @class='form-control' })四、密码输入自动提示在铬中无法禁止
自动完成='关闭'在Chrome58以后都无效了。这个是浏览器的问题没办法了。
五、残疾人的控件值不上传给服务器
解决方法:通过爪哇岛描述语言在使服从之前将控件的有缺陷的属性删除,提交完成之后再复原有缺陷的属性。
六Html .HiddenFor()的控件值不更新
由于HiddenFor默认先使用模型状态的数据,所以在模型状态验证失败的情况下,重新加载画面可能HiddenFor的控件数据是旧的。
解决方法:
ModelState .clear();七、列表与词典的数据剃刀如何绑定
视图模型属性:
公共列表列表测试{获取设置;}公共词典词典{获取设置;}视图端绑定:
@ for(int I=0;模型一。列表测试。计数;i ){ @Html .TextBoxFor(m=m.ListTest[i]).名称,新的{ @ class=' form-control ' })@ Html .TextBoxFor(m=m.ListTest[i]).Phone,new { @ class=' form-control ' })} @ for(int I=0;模型一。字典。计数;I){ 0字符串键=模型。(一)关键要素;输入类型='隐藏'名称='DicTest[@i].key ' value=' @ key '/for(int j=0;j模型最关键的.计数;j ) { @Html .文本框($'DicTest[{i}]).值[{j}].名称,型号预测,预测.名称,新的{ @ class=' form-control ' })@ Html .文本框($'DicTest[{i}]).值[{j}]."电话",型号预测,预测.电话,新{ @class='form-control' }) }}生成的超文本标记语言如下:
输入名称='ListTest[0].Name ' class=' form-control ' id=' list test _ 0 _ _ Name ' type=' text ' value=' lxb 1 '输入名称='ListTest[0].Phone ' class=' form-control ' id=' list test _ 0 _ _ Phone ' type=' text ' value=' 123 '输入名称='ListTest[1].Name ' class=' form-control ' id=' listTest _ 1 _ _ Name ' type=' text ' value=' lxb 2 '输入名称='ListTest[1].Phone ' class=' form-control ' id=' list test _ 1 _ _ Phone ' type=' text ' value=' 1234 '输入名称='ListTest[2].Name ' class=' form-control ' id=' list test _ 2 _ _ Name ' type=' text ' value=' LX B3 '输入名称='ListTest[2].Phone ' class=' form-control ' id=' listest _ 2 _ _ Phone ' type=' text ' value=' 12345 '输入名称='DicTest[0].键类型='隐藏'值='JX '输入名称='DicTest[0].值[0]。Name ' class=' form-control ' id=' DicTest _ 0 _ _ Value _ 0 _ _ Name ' type=' text ' Value=' lxb 1 '输入名称='DicTest[0].值[0]。Phone ' class=' form-control ' id=' DicTest _ 0 _ _ Value _ 0 _ _ Phone ' type=' text ' Value=' 123 '输入名称='DicTest[0].值[1]。Name ' class=' form-control ' id=' DicTest _ 0 _ _ Value _ 1 _ _ Name ' type=' text ' Value=' lxb 2 '输入名称='DicTest[0].值[1]。Phone ' class=' form-control ' id=' DicTest _ 0 _ _ Value _ 1 _ _ Phone ' type=' text ' Value=' 1234 '输入名称='DicTest[1].键类型='隐藏'值='SZ '输入名称='DicTest[1].值[0]。Name ' class=' form-control ' id=' DicTest _ 1 _ _ Value _ 0 _ _ Name ' type=' text ' Value=' lxb 3 '输入名称='DicTest[1].值[0]。Phone ' class=' form-control ' id=' DicTest _ 1 _ _ Value _ 0 _ _ Phone ' type=' text ' Value=' 12345 '输入名称='DicTest[1].值[1]。Name ' class=' form-control ' id=' DicTest _ 1 _ _ Value _ 1 _ _ Name ' type=' text ' Value=' lxb 4 '输入id=' DicTest _ 1 _ _ Value _ 1 _ _ Phone ' class=' form-control ' Value=' 123456 ' Name=' DicTest[1].值[1]。电话其中控件的名字很重要。
列表:viewmodelpropertyname[索引]。modelpropertyname格式。
字典:键设置为viewmodelpropertyname[索引]。关键值设置为viewmodelpropertyname[索引]。价值
八、尽量多使用编辑
比如将第七点的字典使用编辑为。首先需要在共享的或者控制器自身文件夹下创建编辑模板文件夹,然后在编辑模板文件夹中添加分部页。代码如下:
@使用MVCDemo .模型;@ model List @ for(int I=0;模型一。计数;i ){ @Html .TextBoxFor(m=m[i]).名称,新的{ @ class=' form-control ' })@ Html .TextBoxFor(m=m[i]).电话,新的{ @class='form-control' })调用页面设置:
目录的时候
@Html .EditorFor(m=m.ListTest,' _PartialPerson ',$'ListTest ')字典的时候
@ for(int I=0;模型一。字典。计数;I){ 0字符串键=模型。(一)关键要素;输入类型='隐藏'名称='DicTest[@i].Key' value='@key'/@Html .EditorFor(m=m.DicTest[key],' _PartialPerson ',$'DicTest[{i}].值')}生成的HTML:
div class='col-md-10 '输入名称='ListTest[0].Name ' class=' form-control ' id=' list test _ 0 _ _ Name ' type=' text ' value=' lxb 1 '输入名称='ListTest[0].Phone ' class=' form-control ' id=' list test _ 0 _ _ Phone ' type=' text ' value=' 123 '输入名称='ListTest[1].Name ' class=' form-control ' id=' listTest _ 1 _ _ Name ' type=' text ' value=' lxb 2 '输入名称='ListTest[1].Phone ' class=' form-control ' id=' list test _ 1 _ _ Phone ' type=' text ' value=' 1234 '输入名称='ListTest[2].Name ' class=' form-control ' id=' list test _ 2 _ _ Name ' type=' text ' value=' LX B3 '输入名称='ListTest[2].Phone ' class=' form-control ' id=' listest _ 2 _ _ Phone ' type=' text ' value=' 12345 '/div div class=' col-MD-10 '输入名称='DicTest[0].键类型='隐藏'值='JX '输入名称='DicTest[0].值[0]。Name ' class=' form-control ' id=' DicTest _ 0 _ _ Value _ 0 _ _ Name ' type=' text ' Value=' lxb 1 '输入名称='DicTest[0].值[0]。Phone ' class=' form-control ' id=' DicTest _ 0 _ _ Value _ 0 _ _ Phone ' type=' text ' Value=' 123 '输入名称='DicTest[0].值[1]。Name ' class=' form-control ' id=' DicTest _ 0 _ _ Value _ 1 _ _ Name ' type=' text ' Value=' lxb 2 '输入名称='DicTest[0].值[1]。Phone ' class=' form-control ' id=' DicTest _ 0 _ _ Value _ 1 _ _ Phone ' type=' text ' Value=' 1234 '输入名称='DicTest[1].键类型='隐藏'值='SZ '输入名称='DicTest[1].值[0]。Name ' class=' form-control ' id=' DicTest _ 1 _ _ Value _ 0 _ _ Name ' type=' text ' Value=' lxb 3 '输入名称='DicTest[1].值[0]。Phone ' class=' form-control ' id=' DicTest _ 1 _ _ Value _ 0 _ _ Phone ' type=' text ' Value=' 12345 '输入名称='DicTest[1].值[1]。Name ' class=' form-control ' id=' DicTest _ 1 _ _ Value _ 1 _ _ Name ' type=' text ' Value=' lxb 4 '输入名称='DicTest[1].值[1]。Phone ' class=' form-control ' id=' DicTest _ 1 _ _ Value _ 1 _ _ Phone ' type=' text ' Value=' 123456 '/div这样就简化了不少,也到达了重用。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。