1

asp.net MVC Web アプリケーション内に次の Ajax.BeginForm があります:-

@using (Ajax.BeginForm("AddZone", "DataCenter", 


    new AjaxOptions
{
    HttpMethod = "POST",
    InsertionMode = InsertionMode.InsertBefore,
    UpdateTargetId = "zonetableBody",
    LoadingElementId = "progress3",
    OnSuccess = "createsuccess",
    OnFailure="createfail"
}))
{

これにより、次のアクション メソッドが呼び出されます。

[HttpPost]
        [ValidateAntiForgeryToken]
        [CheckUserPermissions(Action = "Edit", Model = "Zone")]
        public ActionResult AddZone(DataCenterDetails z)
        {

次のように、アクション メソッドを実行する前に、カスタム認証アクション フィルターを実行しています。

namespace TMS.Controllers
{
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]

    public class CheckUserPermissionsAttribute : ActionFilterAttribute
    {

        public string Model { get; set; }
        public string Action { get; set; }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {

            int value = 0;
            Repository repository = new Repository();

            if (!repository.can(ADusername,Model,value))


                if (filterContext.HttpContext.Request.IsAjaxRequest())
                {

                    var viewResult = new PartialViewResult();

                    viewResult.ViewName = "~/Views/Errors/_Unauthorized.cshtml";
                    filterContext.Result = viewResult;

私が直面している問題は、ユーザーが Edit に必要なアクセス許可を持っていない場合、 ajax.beginform ボタンをクリックすると、「/_Unauthorized.cshtml」ビューが表示されますが、同時に Onsuccess スクリプトが表示されることです。 「レコードが正常に追加されました」というメッセージが表示されます。

だから私の質問は、Onsuccess スクリプトが起動されないようにする方法_Unauthorized.cshtmlです。

ありがとう

4

2 に答える 2

1

を設定する必要がありfilterContext.Response.StatusCodeます。500 または OK を意味しないコードを設定できます。

于 2013-12-30T19:56:07.657 に答える
1

I. AjaxOptions には、OnSuccess または OnFailure の呼び出しの前に発生する OnComplete プロパティがあります。ページの更新をキャンセルするには、JavaScript 関数から false を返します。

http://msdn.microsoft.com/en-us/library/system.web.mvc.ajax.ajaxoptions.oncomplete(v=vs.118).aspxを参照してください。

Ⅱ.ajaxリクエストのグローバルエラー処理が必要な場合は、使用する必要があります.ajaxError()

$(document).ajaxError(function(event, request, settings) {
    if (XMLHttpRequest.status == 400) {
        window.location == "/Error";           
    }
});

お役に立てれば

于 2013-12-30T20:14:19.623 に答える