代码之家  ›  专栏  ›  技术社区  ›  Chaddeus

如何最好地使用asp.netmvc2的数据注释验证?

  •  2
  • Chaddeus  · 技术社区  · 14 年前

    典型场景,发布到检查模型状态.IsValid如果是,保存到数据库。验证规则设置为模型中的数据注释。

    这是我的问题。我的数据字段不能超过400个字符。数据注释实现了这一点,并在客户端执行jQuery验证。

    用户输入395个字符,包括一些换行符。我的应用程序,把那些新词变成 <br /> 标签。但那是在 UpdateModel() 被称为。自从 < 标记比换行符长,它在UpdateModel上通过验证,但在实际尝试保存到DB时失败。

    基本上是这样的代码(来自NerdDinner):

    [HttpPost, Authorize]
    public ActionResult Edit(int id, FormCollection collection) {
    
        Dinner dinner = dinnerRepository.GetDinner(id);
    
        try {
            UpdateModel(dinner, "Dinner");
            dinner.Description = dinner.Description.Replace("\n", "<br />");
            //... now it's over length limit
    
            dinnerRepository.Save();
    
            return RedirectToAction("Details", new { id=dinner.DinnerID });
        }
        catch {
            return View(dinner);
        }
    }
    

    当抛出异常时,不会填充数据注释中的ModelState规则冲突,因此不会向我的用户显示任何消息。

    处理这个问题的好方法是什么?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Buildstarted    14 年前

    if (TryUpdateModel(dinner, "Dinner")) {
        dinner.Description = dinner.Description.Replace("\n", "<br />");
        //... now it's over length limit
    
        if (TryValidateModel(dinner)) {
            dinnerRepository.Save();
            return RedirectToAction("Details", new { id=dinner.DinnerID });
        }
    }
    
    return View(dinner);
    

    这样就摆脱了try{}块,并允许您验证您的模型。

        2
  •  2
  •   A_HREF    14 年前