gpt4 book ai didi

asp.net-mvc - MVC 扩展 Controller 以具有 ajax 感知重定向功能

转载 作者:行者123 更新时间:2023-12-02 06:12:03 25 4
gpt4 key购买 nike

嗨,我正在学习 Ajax + MVC。我认为 Controller 自动处理 ajax 感知的 Redirect() 会很好。经过一番挖掘,我找到了此 link 中的代码。下面的代码对用户完全透明,用户只需调用 Redirect(someUrlString) 即可,无需担心普通/ajax 调用之间的差异。使它非常整洁和凉爽。

public abstract class BaseController : System.Web.Mvc.Controller {
//turn into ajax aware redirect
protected override RedirectResult Redirect(string url) {
return new AjaxAwareRedirectResult(url);
}
}

还有...

public class AjaxAwareRedirectResult : RedirectResult {
public AjaxAwareRedirectResult(string url) : base(url) { }
public override void ExecuteResult(ControllerContext context) {
if (context.RequestContext.HttpContext.Request.IsAjaxRequest()) {
string desturl = UrlHelper.GenerateContentUrl(Url, context.HttpContext);
JavaScriptResult result = new JavaScriptResult() {
Script = "window.location='" + desturl + "';" };
result.ExecuteResult(context);
}
else { base.ExecuteResult(context); }
}
}

但是,它并不完整。挑战是:

RedirectToRouteResult RedirectToAction(ActionResult结果)

还没有(非常方便,特别是对于 T4MVC)。

由于我对 MVC 还很陌生,所以我尝试过,但我的知识不够,不足以弄清楚如何自己编写这个。你们中的任何专家可以帮我解决这个问题吗?所以我可以从你的代码中学习它?非常感谢。

最佳答案

这是我在项目中用于 Ajax 感知重定向的快速简单的解决方案。

  1. 为操作创建一个 AjaxRedirectAttribute 类。

        public class AjaxRedirectAttribute : ActionFilterAttribute
    {
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
    var result = filterContext.Result as RedirectResult;
    if (result != null && filterContext.HttpContext.Request.IsAjaxRequest())
    {
    string destinationUrl = UrlHelper.GenerateContentUrl(result.Url, filterContext.HttpContext);
    filterContext.Result = new JavaScriptResult()
    {
    Script = "window.location = '" + destinationUrl + "';"
    };
    }
    }
    }
  2. 按如下方式使用此属性可以重定向到其他页面或从操作返回一些结果。

    [AjaxRedirect]
    public ActionResult MyAction(FormCollection frmcol)
    {
    // some code here
    if (UserId != 0)
    {
    return Redirect(this.Url.Action("Action", "Controller"));
    }
    else
    {
    return Content("Error message here.");
    }
    }

关于asp.net-mvc - MVC 扩展 Controller 以具有 ajax 感知重定向功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11175543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com