0

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 */
    }
}

問題は、ネストされたユーザーも検証されることですが、これは投稿の更新であり、フォームにキャプチャ フィールドがないため、modelstate は常に無効です。投稿の値型プロパティのみを検証するにはどうすればよいですか?

4

1 に答える 1

0

モデルを使用するすべての場所でCAPTCHAが必要でない限り、ユーザーモデルでCAPTCHAチェックを行うことに特に同意しませんUser

そうは言っても、あなたは...

  • CAPTCHA を実際にチェックするために設定する必要があるフラグを作成し、それ以外の場合は有効な値を返します。
  • 現在のフォームと完全に一致する別のモデルを作成する
  • モデルから CAPTCHA を削除し、CAPTCHA を必要とするアクションのパラメータとして取り込んでください。
  • 常に有効な値を返すデフォルトとして CAPTCHA のセンチネル値を設定します
  • 他にもたくさんのアイデア...
于 2011-09-01T14:01:46.307 に答える