ASP.NET MVC Разрешает Атрибут запускать модальное?

Я работаю над сайтом, который использует jQuery модальные диалоговые окна, чтобы сделать различные вещи как вход в систему и такой.

Однако; у нас есть одна небольшая проблема с использованием их.. то, которое является, мы используем [Авторизовать] атрибут на большом количестве наших методов действия и поэтому что происходит, - то, если пользователь не зарегистрирован и поражает маршрут, что они должны быть авторизованы для него, показывает, что страница входа в систему как он, предполагают к, но очевидно это, предполагают, чтобы быть модальным.

Во всяком случае, короче говоря, существует ли способ создать пользовательское, авторизовывают атрибут, который может инициировать модальное вместо фактического представления, которое составляет модальный вход в систему?

6
задан Kara 7 February 2014 в 19:19
поделиться

1 ответ

В этом случае вы можете использовать атрибут фильтра настраиваемых действий, который открывает всплывающее окно, если пользователь не авторизован.
В этом фильтре действий просто проверьте, вошел ли пользователь в систему, и добавьте логическое значение в коллекцию ViewData.
Добавьте атрибут к действию контроллера.
Затем на главной странице добавьте условную визуализацию кода, открывающего всплывающее окно.

Код для атрибута:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class PopupAuthorizeAttribute : AuthorizeAttribute
{
    private void CacheValidateHandler(HttpContext context, object data, ref HttpValidationStatus validationStatus)
    {
        validationStatus = this.OnCacheAuthorization(new HttpContextWrapper(context));
    }

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        bool isAuthorized = false;
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }
        if (this.AuthorizeCore(filterContext.HttpContext))
        {
            HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache;
            cache.SetProxyMaxAge(new TimeSpan(0L));
            cache.AddValidationCallback(new HttpCacheValidateHandler(this.CacheValidateHandler), null);
            isAuthorized = true;
        }

        filterContext.Controller.ViewData["OpenAuthorizationPopup"] = !isAuthorized;
    }
}

На главной странице или другом общем представлении добавить условную визуализацию:

<% if((bool)(ViewData["OpenAuthorizationPopup"] ?? true)) { %>
 ...Your code to open the popup here...
<% } %>
5
ответ дан 17 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: