0

次のカスタマイズされたバリデーターがあります。

public class CAuthorize : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        //if ajax request set status code and end responcse
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; 
            filterContext.HttpContext.Response.Write(/*some data*/);                        
            filterContext.HttpContext.Response.End();
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }

}

そして次のアクション

    [HttpPost]
    [CAuthorize]
    public ActionResult Comment(Comment comment_obj)
    {
        if (ModelState.IsValid)
        {
            this.tblSomthing.comments.Add(comment_obj);
            this.db.SaveChanges();
        }
        return /*some view*/
    }

バリデーターが失敗したときにアクションが実行され、DB レコードが保存されるのに応答が正しい (バリデーターで設定されたもの) の理由 バリデーターが失敗した場合にアクションの実行を停止したいだけです。

4

1 に答える 1

0

ユーザーがなんらかの形式の出力を表示するには、アクションがビューを返す必要があることをご存知ですか? Response.Writeorをコントローラーで使用Response.Endしても何も起こりません。

とにかく、そこにあるのは属性であり、バリデーターではありません。バリデーターの場合、ビューで使用されるモデル内にあり、プロパティに適用されます。

于 2012-12-11T06:22:44.847 に答える