47

ActionFilter単純なスパム ブロックのコードを再利用するために を構築しています。基本的にHtml Helperは、入力テキスト ボックスと非表示の入力をレンダリングするメソッドを用意し、ActionFilter で 2 つの値が同じかどうかを確認します。 . そうでない場合は、残りの検証ロジックを活用して に を追加したいModelStateErrorModelStateですが、どうすればよいですか? ModelStateError内にfromを追加するにはどうすればよいActionFilterですか?

更新:これが私が試しているコードです。この属性を持つコントローラー アクションをテストすると、必要なフォーム値を渡さなくてModelState.IsValidも返されます。true

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var r = filterContext.HttpContext.Request;
    if (r.Form["sixtimesnine"] != r.Form["fourtytwo"] || string.IsNullOrEmpty(r.Form["sixtimesnine"]) || string.IsNullOrEmpty(r.Form["fourtytwo"]))
    {
        filterContext.Controller.ViewData.ModelState.AddModelError("Spam", this.ErrorMessage);
    }
    base.OnActionExecuting(filterContext);
}

これは次のActionMethodとおりです。

[ValidateAntiSpam(ErrorMessage = "Spambotar får inte.")]
public ActionResult Write(GuestbookPost postToCreate)
{
    if (ModelState.IsValid)
    {
        _posts.Add(postToCreate);
        return RedirectToAction("Index");
    }
    return View();
}

OnActionExecutingメソッド内にブレークポイントを設定して「テストのデバッグ」をクリックすると、ブレークポイントにヒットしないことに気付きました。なんで?

4

1 に答える 1

97

それは次のようになります。 filterContext.Controller.ViewData.ModelState

于 2009-06-01T07:21:16.403 に答える