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

I. AjaxOptions 具有 OnComplete 属性,该属性发生在调用 OnSuccess 或 OnFailure 之前。要取消页面更新,请从 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 回答
1

您需要设置filterContext.Response.StatusCode. 可以设置500或者不代表OK的代码;

于 2013-12-30T19:56:07.657 回答