首页 新闻 赞助 找找看

ASP.NET MVC 验证问题

0
悬赏园豆:60 [待解决问题]

两个模型类:

public class Academy
{
  public virtual int Id { get; set; }

  [Required(ErrorMessage = "学院名称不能为空")]
  [StringLength(20, ErrorMessage = "学院名称不能少于或超过20字符")]
  public virtual string Name { get; set; }
}

public class Teacher
{
  public virtual int Id { get; set; }

  [Required(ErrorMessage = "帐户名称不能为空")]
  [StringLength(20,ErrorMessage = "帐户名称不能超过20个字符")]
  public virtual string Name { get; set; }

  public virtual Academy Academy { get; set; }

}

现在我有一个方法:

[HttpPost]
public ActionResult Add(Teacher teacher)
{
  //TODO:Not Finished
  if(ModelState.IsValid)
  {
    _teacherService.AddTeacherInfo(teacher);
    return RedirectToAction("Add");
  }

}

传入这个方法的teacher类的信息有

teacher.Name = “xxx”

teacher.Academy.Id = "XX"

而teacher.Academy.Name 为 NULL (由于前台绑定的是一个DropDownList 所以这里只返回了teacher.Academy.Id)

现在问题出现了:ModelState.IsValid 一直为false 原因是teacher.Academy.Name 没有通过验证!!!

请问有什么好的解决方案吗?

teroy的主页 teroy | 初学一级 | 园豆:125
提问于:2014-03-17 21:25
< >
分享
所有回答(6)
0

为 Name属性赋值,或者 单个属性进行验证

Qlin | 园豆:2403 (老鸟四级) | 2014-03-18 08:24
0

不要标记为 [Required] 试试,如果不能去掉

 

那你就在 调用ModelState.IsValid 之前 ,把这个错误清除

 

ModelState["xxx"].Errors.Clear();

Yu | 园豆:12980 (专家六级) | 2014-03-18 08:59

你所说的方法是可以的

但我觉得ModelState["xxx"].Errors.Clear() 这个方法不够优雅

我觉得理想的实现方案是

public class Teacher
{
  public virtual int Id { get; set; }

  [Required(ErrorMessage = "帐户名称不能为空")]
  [StringLength(20,ErrorMessage = "帐户名称不能超过20个字符")]
  public virtual string Name { get; set; }

  public virtual Academy Academy { get; set; }

}

在Academy上配置一个不验证的特性 不知道行不行呢

支持(0) 反对(0) teroy | 园豆:125 (初学一级) | 2014-03-18 10:35

@teroy: 你可以自定义一个继承ValidationAttribute的特性类来验证,但Required就不能使用了

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2014-03-18 10:58
0

也遇到过,一直找不出来原因,没深究,直接让它不在后台验证了

开山怪不怪 | 园豆:544 (小虾三级) | 2014-03-18 11:20
0

增加一个隐藏域,在DropDownList变化时把name赋值给隐藏域
<input type="hidden" name="teacher.Academy.Name">

國際难民 | 园豆:202 (菜鸟二级) | 2014-03-18 15:06
0

你这个牵涉到复杂属性的模型绑定问题,你可以增加一个隐藏域
<input type="hidden" name="Academy_Name" value="你要绑定的值">

静女 | 园豆:27 (初学一级) | 2014-03-18 22:22
0

可怜的孩子。

迅捷网络[来送福利] | 园豆:616 (小虾三级) | 2014-03-19 09:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册