ASP.NET验证模型的嵌套属性

时间:2011-09-01 13:44:12

标签: asp.net-mvc model-binding model-validation nested-properties

我正在尝试使用TryUpdateModel验证包含具有验证规则的其他对象的模型:

public class Post
{
    public User User;
}

public class User : IValidatableObject
{
    public string Captcha;

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {            
        if (/* check if captcha valid */)
        {
            yield return new
                ValidationResult("Captcha invalid.",
                    new[] { "Captcha" });
        }
}

public ActionResult Edit(int postId, string title)
{
    var post = postsRepository.Get(postId);
    if (TryUpdateModel(post))
    {
        /* save */
    }
}

问题是嵌套用户也被验证,但这是更新帖子,表单中没有验证码字段,因此模型状态始终无效。如何仅验证帖子的值类型属性?

1 个答案:

答案 0 :(得分:0)

我不特别同意对用户模型进行CAPTCHA检查,除非您需要使用CAPTCHA 无处不在使用User模型。

话虽如此,你可以......

  • 创建一个必须设置的标志才能实际检查CAPTCHA,否则返回有效。
  • 创建另一个与当前表单完全匹配的模型
  • 从模型中删除CAPTCHA,只需将其作为参数添加到需要它的操作
  • 将CAPTCHA的标记值设置为默认值,始终返回有效
  • 吨其他想法......