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



我正在尝试使用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 */
    }
}

问题是嵌套的用户也被验证,但这是更新的帖子,表单中没有captcha字段,所以modelstate总是无效的。如何仅验证帖子的值类型属性?

我不特别同意在用户模型上进行CAPTCHA检查,除非您需要在所有使用User模型的地方进行CAPTCHA检查。

话虽如此,你可以……

  • 创建一个必须设置的标志,以便实际检查CAPTCHA,否则返回有效。
  • 创建另一个完全匹配当前表单的模型
  • 从模型中删除CAPTCHA,并将其作为需要它的操作的参数
  • 为CAPTCHA设置一个哨兵值作为默认值,它总是返回有效的
  • 大量其他想法…

相关内容

  • 没有找到相关文章

最新更新