【小白求教】关于MVC,Razor表单验证错误信息的两个问题

Diza1986 2018-09-26 04:26:13
先感谢大家可以帮小弟解惑。

问题1:
在Model中定义一个日期项目 public DateTime? Birthday {get;set;}
Razor映射在view中就会自动有一个数据类型的验证,有默认的错误信息:The field 生日 must be a date.
我想自定义错误信息该怎么做?

//补充:
通过源代码看到该错误信息在【data-val-date】属性里,所以尝试用jquery去修改,
$("#Birthday").attr("data-val-date","请输入正确的生日!");
源代码中可以看到已经改了,可是报出的错误信息并没有变。

另外,用[DataType]特性的话控件效果都不一样了,非法的日期写不进去了(Chrome),
IE就不起作用(可能是我的版本太低),先不考虑这样做。

问题2:
model继承IValidatableObject类来实现关联check,例:生日和年龄不可以都空白

if (Birthday == null && Age == null)
{
yield return new ValidationResult("请选择输入生日或年龄!", new string[] { "Birthday", "Age" });
}

两个项目都要做提示所以是new string[] { "Birthday", "Age" },
但是这样做在页面上@Html.ValidationSummary就会显示两个相同的错误,怎么去掉重复的?

谢谢!!!
...全文
784 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
小白求学路 2018-09-29
  • 打赏
  • 举报
回复
新手蜕变。。 顶一波
哈哈gogo 2018-09-28
  • 打赏
  • 举报
回复
支持小白,支持小白
Diza1986 2018-09-28
  • 打赏
  • 举报
回复
又接到要求用popup画面显示过多的errormessage,各种不会。。。学习无止境啊。。。。。。
哈哈哈
sdfgrtyu 2018-09-28
  • 打赏
  • 举报
回复
引用 15 楼 Diza1986 的回复:
第一个问题,现在是这样的代码,日期类型就可以一并解决了,其他类型也可以扩展。
$('form').each(function () {
var inputs = $(this).find("input");
if (inputs.length) {
$.each(inputs, function (index, value) {
if (value.getAttribute("data-val-date")) {
value.setAttribute("data-val-date", "请输入正确的日期!");
}
});
}
})

第二个问题,通过遍历<li>去重复也就不会针对每一个error进行单独开发。

Diza1986 2018-09-28
  • 打赏
  • 举报
回复
第一个问题,现在是这样的代码,日期类型就可以一并解决了,其他类型也可以扩展。
$('form').each(function () {
var inputs = $(this).find("input");
if (inputs.length) {
$.each(inputs, function (index, value) {
if (value.getAttribute("data-val-date")) {
value.setAttribute("data-val-date", "请输入正确的日期!");
}
});
}
})

第二个问题,通过遍历<li>去重复也就不会针对每一个error进行单独开发。
sdfgrtyu 2018-09-28
  • 打赏
  • 举报
回复
<form action="/" method="post"><div class="validation-summary-errors" data-valmsg-summary="true"><ul><li>XXX</li>
<li>cccc</li>
</ul></div><input class="input-validation-error" data-val="true" data-val-date="字段 Birthday 必须是日期。" id="Birthday" name="Birthday" type="text" value="" /><input class="input-validation-error" data-val="true" data-val-date="字段 Age 必须是日期。" id="Age" name="Age" type="text" value="" /> <button type="submit">提交</button>
</form>


就是这个效果,不知道有没有什么问题
Diza1986 2018-09-28
  • 打赏
  • 举报
回复
第一个问题,按要求可能还需要从关联的label中把项目名取到拼接到message中,再考虑
sdfgrtyu 2018-09-28
  • 打赏
  • 举报
回复
看效果图
<form action="/" method="post"><div class="validation-summary-errors" data-valmsg-summary="true"><ul><li>请选择输入生日或年龄!</li>
</ul></div><input class="input-validation-error" data-val="true" data-val-date="字段 Birthday 必须是日期。" id="Birthday" name="Birthday" type="text" value="" /><input class="input-validation-error" data-val="true" data-val-date="字段 Age 必须是日期。" id="Age" name="Age" type="text" value="" /> <button type="submit">提交</button>
sdfgrtyu 2018-09-28
  • 打赏
  • 举报
回复
引用 11 楼 Diza1986 的回复:
[quote=引用 9 楼 u010941149 的回复:]
我这代码你那两个问题都能解决,,


能理解,但不能作为标准的解决办法吧,类似的情况都要一一列举去处理也不实际。
另外,ModelState.AddModelError("Birthday", "");会不会出一个空的<li>形成一个空行啊,我回来可以试一下[/quote]
你用jquery不也是一一列举?
Diza1986 2018-09-28
  • 打赏
  • 举报
回复
引用 9 楼 u010941149 的回复:
我这代码你那两个问题都能解决,,


能理解,但不能作为标准的解决办法吧,类似的情况都要一一列举去处理也不实际。
另外,ModelState.AddModelError("Birthday", "");会不会出一个空的<li>形成一个空行啊,我回来可以试一下
Diza1986 2018-09-28
  • 打赏
  • 举报
回复
第二个问题,如果一定要把错误信息显示在一起并去掉多个元素发生的同一重复错误,不知有什么简便的办法,
错误信息是在页面的div(validation-summary-errors)区域内加入<li>来显示的,通过js获取<li>来去掉重复应该是可行的,
看来目前只能这样考虑了。
sdfgrtyu 2018-09-28
  • 打赏
  • 举报
回复
我这代码你那两个问题都能解决,,
Diza1986 2018-09-28
  • 打赏
  • 举报
回复
第一个问题解决了,还是$("#Birthday").attr("data-val-date","请输入正确的生日!");去更改data-val-date属性,直接这样写就可以了。。。

我起初是这样写的,包在$(function ()里,结果只改变了元素属性而没有作用到message上,水平太低了。。。并不是很懂。。。
$(function () {
$("#Birthday").attr("data-val-date","请输入正确的生日!");
}
)
Diza1986 2018-09-28
  • 打赏
  • 举报
回复
引用 6 楼 u010941149 的回复:
if (ModelState["Birthday"].Errors[0].ErrorMessage != "请选择输入生日或年龄!")
{
ModelState.Remove("Birthday");
ModelState.AddModelError("Birthday", "XXX");
}
else if (ModelState["Birthday"].Errors[0].ErrorMessage == "请选择输入生日或年龄!")
{
ModelState.Remove("Birthday");
ModelState.AddModelError("Birthday", "");
}


这么暴力啊
Diza1986 2018-09-27
  • 打赏
  • 举报
回复
引用 4 楼 u010941149 的回复:
1. [DataType(DataType.Date,ErrorMessage = "请输入生日")]
public DateTime? Birthday { get; set; }
2.你说的什么意思?你原来就是new ValidationResult啊,原来有高亮显示?


1,试过,不管用
2,new ValidationResult的第二个参数可以指定错误项目,页面元素就会添加一个class:input-validation-error,默认是没有高亮的,通过css控制一下即可,不知是不是正规做法,个人觉得这样挺好的
sdfgrtyu 2018-09-27
  • 打赏
  • 举报
回复
引用 3 楼 Diza1986 的回复:
[quote=引用 2 楼 u010941149 的回复:]
1. [Required(ErrorMessage= "请输入生日!")]
public DateTime? Birthday { get; set; }
2.List<ValidationResult> errors = new List<ValidationResult>();
if (Birthday==null) {
errors.Add(new ValidationResult("请选择输入生日或年龄"));
}
return errors;


1,不是必须check,是数据类型check

2,这样就没有关联错误项目了,前台没有高亮提示。
现在倒是在考虑,有关联错误项目的error就只显示在项目下面,不再@Html.ValidationSummary中显示了,[/quote]
1. [DataType(DataType.Date,ErrorMessage = "请输入生日")]
public DateTime? Birthday { get; set; }
2.你说的什么意思?你原来就是new ValidationResult啊,原来有高亮显示?

Diza1986 2018-09-27
  • 打赏
  • 举报
回复
引用 2 楼 u010941149 的回复:
1. [Required(ErrorMessage= "请输入生日!")]
public DateTime? Birthday { get; set; }
2.List<ValidationResult> errors = new List<ValidationResult>();
if (Birthday==null) {
errors.Add(new ValidationResult("请选择输入生日或年龄"));
}
return errors;


1,不是必须check,是数据类型check

2,这样就没有关联错误项目了,前台没有高亮提示。
现在倒是在考虑,有关联错误项目的error就只显示在项目下面,不再@Html.ValidationSummary中显示了,
sdfgrtyu 2018-09-27
  • 打赏
  • 举报
回复
1. [Required(ErrorMessage= "请输入生日!")]
public DateTime? Birthday { get; set; }
2.List<ValidationResult> errors = new List<ValidationResult>();
if (Birthday==null) {
errors.Add(new ValidationResult("请选择输入生日或年龄"));
}
return errors;
Diza1986 2018-09-27
  • 打赏
  • 举报
回复
自己顶一下,
望大神不吝赐教!
sdfgrtyu 2018-09-27
  • 打赏
  • 举报
回复
if (ModelState["Birthday"].Errors[0].ErrorMessage != "请选择输入生日或年龄!")
{
ModelState.Remove("Birthday");
ModelState.AddModelError("Birthday", "XXX");
}
else if (ModelState["Birthday"].Errors[0].ErrorMessage == "请选择输入生日或年龄!")
{
ModelState.Remove("Birthday");
ModelState.AddModelError("Birthday", "");
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧