Ошибка возврата в модальном режиме вместо Redirect C# MVC Ajax - PullRequest
1 голос
/ 14 февраля 2020

Когда пользователь выбирает что-то, к чему у него нет доступа, или переходит на страницу, к которой у него нет доступа, он перенаправляет его на страницу, которая говорит, что у него нет доступа. Я хотел бы справиться с этим по-другому. Используя модал вместо перенаправления.

Это контролируется в

 protected override void OnActionExecuting(ActionExecutingContext context)

Поэтому, когда пользователь переходит на страницу, к которой у него нет доступа, перенаправляет

UnAuthoRedirect(context);

Это UnAuthRedirect

    private void UnAuthoRedirect(ActionExecutingContext context)
    {
        //context.HttpContext.Response.Redirect(Url.Action("unauthorized", "Account"));
        context.HttpContext.Response.Redirect("~/Error/AdminStatus");

    }

У меня также есть Ajax вызовы на кнопках

 @Ajax.ModalDialogActionLink("Edit", "Edit", "Addresses", "Edit", "btn btn-warning btn-sm", new { id = item.AddressUI })

Когда пользователь выбирает Ajax .ModalDialogActionLink, и у него нет разрешения на доступ к нему, выскакивает модал с "Ajax вызов не удался" Я хотел бы сказать пользовательскую ошибку.

Я пробовал это:

if (IsThisAjaxRequest() == true)//if userid !=null && Check Crud
  {
    //Equals("You do not have permission to this area");
    Response.StatusCode = (int)HttpStatusCode.InternalServerError;

  }

Но результат тот же.

Вот IsThisAjaxRequest ()

    private bool IsThisAjaxRequest()
    {
        bool result = false;
        var currentContext = new HttpContextWrapper(System.Web.HttpContext.Current);
        if (currentContext.Request.Headers["X-Requested-With"] != null
            && currentContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
        {
            result = true;
        }

        return result;
    } 

Так что, если бы я мог настроить оба из них, чтобы просто выскакивать ту же ошибку, что было бы лучше, Если нет, тогда я сделаю то, что необходимо.

Если вам нужно что-то еще увидеть, просто дайте мне знать. Заранее спасибо.

ОБНОВЛЕНИЕ: добавлены ModalDialogExtensions

   public static class ModalDialogExtensions
{
    sealed class DialogActionResult : ActionResult
    {
        public DialogActionResult(string message)
        {
            Message = message ?? string.Empty;
        }

        string Message { get; set; }

        public override void ExecuteResult(ControllerContext context)
        {

            context.HttpContext.Response.Write("<script>   window.location.assign('" + Message + "')   </script>");
        }
    }



    public static MvcHtmlString ModalDialogActionLink(this AjaxHelper ajaxHelper, string linkText, string actionName, string dialogTitle, string CssClass)
    {
        var dialogDivId = Guid.NewGuid().ToString();

        return ajaxHelper.ActionLink(linkText, actionName, routeValues: null,
                ajaxOptions: new AjaxOptions
                {
                    UpdateTargetId = dialogDivId,
                    InsertionMode = InsertionMode.Replace,
                    HttpMethod = "GET",
                    OnBegin = string.Format(CultureInfo.InvariantCulture, "prepareModalDialog('{0}')", dialogDivId),
                    OnFailure = string.Format(CultureInfo.InvariantCulture, "clearModalDialog('{0}');alert('Ajax call failed')", dialogDivId),
                    OnSuccess = string.Format(CultureInfo.InvariantCulture, "openModalDialog('{0}', '{1}')", dialogDivId, dialogTitle)
                }, htmlAttributes: new { @class = CssClass });

    }

ОБНОВЛЕНИЕ:

Я понял, что единственная причина, по которой ссылка не будет работать, - это отсутствие доступа к ней. Поэтому я просто заменил текст вышеупомянутого «OnFailure» на

OnFailure = string.Format(CultureInfo.InvariantCulture, "clearModalDialog('{0}');alert('You are not authorized to access this area!')", dialogDivId)

Однако я все еще хочу использовать модальное всплывающее окно для UnAuthorized вместо перенаправления. Любые предложения будут полезны ..

ОБНОВЛЕНИЕ: Из того, что я прочитал в некоторых других сообщениях, это то, что вы будете делать перенаправление. Я также читал, что вы должны избегать перенаправлений в MVC решении. Поэтому я не уверен, что правильно, а что неправильно ..

...