【问题标题】:Authorization and Jquery dialog problem授权和Jquery对话框问题
【发布时间】:2010-03-31 16:01:11
【问题描述】:

我对需要角色的操作的 Jquery 对话框有一点问题。 在我的示例中,用户可以单击删除按钮并且必须确认操作。 在我的控制器中,Delete 操作需要一个角色,如果用户处于所需角色,则删除该对象。

问题:如何提醒用户 * 元素被删除(重定向到索引视图) * 有一个错误(警告消息) * 他无权删除(用消息提醒)

在使用授权过滤器之前,删除操作返回一个带有布尔值的 JSON,该布尔值指示是否有错误、一个成功重定向的 URL 和一个错误警报消息。

由于我无法从过滤器返回 JSON,因此我使用授权过滤器创建了另一个方法,该方法返回带有确认内容的部分视图。如果用户没有权限,过滤器会返回带有未经授权的异常内容的部分视图。

问题:如何区分返回的部分视图。创建对话框时,我需要了解按钮功能。

谢谢!

【问题讨论】:

    标签: asp.net-mvc jquery jquery-dialog unauthorized


    【解决方案1】:

    我建议在您的模型中添加一些东西,其中 jquery 对话框正在构建,例如 CanDeleteItem 标志。然后使用该信息构建您的对话框,而不是假设他们具有删除权限。显示用户无法使用的按钮是个坏主意。

    对于其他错误情况,假设您使用 jquery.ajax 发布到删除操作,当控制器抛出异常时应该引发 onerror 事件。

    $.ajax({
      url: "/delete/5",
      type: "POST",
      success: function(json){
       // the delete happened
      },
      error: function(request, status, error){
      // it failed, authorization(403) or just an error (500)
      }
    });
    

    【讨论】:

    • 问题是错误 401 后的重定向。我的 ajax 函数永远不会出错,但我的登录视图的内容。
    • 你的控制器有 HandleError 属性吗?尝试删除该属性,然后查看错误的 ajax 函数是否被调用。
    【解决方案2】:

    通过向 Global.asax 添加代码找到了解决方案:

    protected void Application_EndRequest()
        {
            if (Context.Response.StatusCode == 302 &&
                Context.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
            {
                Context.Response.Clear();
                Context.Response.StatusCode = 401;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多