.NETCore MVC怎么实现部分字段验证,ModelState.IsValid总为false

LvBao_117 2019-09-23 08:07:08
如标题,我实体类里有个必填字段,但此次操作不需要它,在page页面没有它
post的时候,ModelState.IsValid总为false,捕捉到错误是:该字段不能空
怎么才能让这个字段不参与验证呢?谢谢

网上说的ModelState.Remove("字段")试过也不行
...全文
747 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋的红果实 2019-09-25
  • 打赏
  • 举报
回复

if(获取到的信息==密码为空) //说明只有密码一项错误,没别的错误
{
    提交;
}
else
{
    不提交;
}
秋的红果实 2019-09-25
  • 打赏
  • 举报
回复
首先,ModelState是服务端验证 只有客户端的验证靠不住,尤其当下各种 流氓器 盛行,有的都没测试,客户就下载使用了 1、去掉required特性,自己写代码验证 没有EF的时代,难道就不写程序了吗?

if(model.passWord=="")
{
    //提示密码不能为空
    return;
}
这很难吗 2、接着你现在的状态来 你不是已经获取到错误信息了吗,去掉modelstate.isvalid判断,改为:

if(获取到的信息==密码为空) //说明只有密码一项错误,没别的错误
{
    提交;
}
{
    不提交;
}
LvBao_117 2019-09-25
  • 打赏
  • 举报
回复
感谢@秋的红果实 !暂时只好这么处理了
LvBao_117 2019-09-24
  • 打赏
  • 举报
回复
我的Razor页面就没有密码的框,但实体类里有。就是说我只更新联系方式、住址等,密码根本就没出现在界面上
exception92 2019-09-24
  • 打赏
  • 举报
回复
加Required 模型就会进行验证;去掉Required特性,考虑是否可以结合前端js呢
叶大白丶 2019-09-24
  • 打赏
  • 举报
回复
引用 3 楼 LvBao_117 的回复:
[quote=引用 2 楼 叶大白丶 的回复:] 可以在model不需要验证的字段的后面设置默认值 (类似于这种 public string UserId { get; set; } = string.Empty; ) 而且 好像模型验证如果字段上方不加特性(类似于这种 [Required(ErrorMessage = "客户id不能为空")] ) 是不会进行验证吧。
现在就是加了 [Required(,唉 这个字段是密码,修改信息时,不需要改密码。加了string.Empty,添加时,不输密码也能提交了哇[/quote] 你想要的效果是 在新增时 希望验证密码为空。但是在修改密码时不要验证密码 这个效果是嘛。 这样的话 好像你只能重新再建立一个Model吧 不然你一个模型验证 多个地方用一个地方加。其余验证的地方都会影响
LvBao_117 2019-09-24
  • 打赏
  • 举报
回复
引用 2 楼 叶大白丶 的回复:
可以在model不需要验证的字段的后面设置默认值 (类似于这种 public string UserId { get; set; } = string.Empty; ) 而且 好像模型验证如果字段上方不加特性(类似于这种 [Required(ErrorMessage = "客户id不能为空")] ) 是不会进行验证吧。
现在就是加了 [Required(,唉
这个字段是密码,修改信息时,不需要改密码。加了string.Empty,添加时,不输密码也能提交了哇
叶大白丶 2019-09-24
  • 打赏
  • 举报
回复
可以在model不需要验证的字段的后面设置默认值 (类似于这种 public string UserId { get; set; } = string.Empty; ) 而且 好像模型验证如果字段上方不加特性(类似于这种 [Required(ErrorMessage = "客户id不能为空")] ) 是不会进行验证吧。
楠小南 2019-09-24
  • 打赏
  • 举报
回复
那我问你 不修改则留空,那是不是 可以为空?答案是的,那就把 Required 去掉,
add 的时候用另一个模型去验证,然后再add, 修改的话就用附加模型的方式


context.Attach(entity2);
context.Entry(entity2).Property(m => m. 密码).IsModified = entity2.密码 != null;
context.SaveChanges();


LvBao_117 2019-09-24
  • 打赏
  • 举报
回复
引用 5 楼 exception92 的回复:
加Required 模型就会进行验证;去掉Required特性,考虑是否可以结合前端js呢
请问版主大人,ModelState不是服务端验证吗?
LvBao_117 2019-09-24
  • 打赏
  • 举报
回复
引用 4 楼 叶大白丶 的回复:
[quote=引用 3 楼 LvBao_117 的回复:]
[quote=引用 2 楼 叶大白丶 的回复:]
可以在model不需要验证的字段的后面设置默认值 (类似于这种 public string UserId { get; set; } = string.Empty; ) 而且 好像模型验证如果字段上方不加特性(类似于这种 [Required(ErrorMessage = "客户id不能为空")] ) 是不会进行验证吧。
现在就是加了 [Required(,唉
这个字段是密码,修改信息时,不需要改密码。加了string.Empty,添加时,不输密码也能提交了哇[/quote]

你想要的效果是 在新增时 希望验证密码为空。但是在修改密码时不要验证密码 这个效果是嘛。 这样的话 好像你只能重新再建立一个Model吧 不然你一个模型验证 多个地方用一个地方加。其余验证的地方都会影响[/quote]再弄个类也倒是容易,关键是怎么实现更新,context.Attach(entity2).State = EntityState.Modified; entity2和数据库的表entity不同,就没了对应关系了,试过不行

62,041

社区成员

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

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

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

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