MVC 2:当调用者定义了 MapRoute 时,Ajax.ActionLink 重定向到新页面

发布于 2024-12-10 01:01:52 字数 5842 浏览 1 评论 0原文

一切正常,直到我还没有为具有 AJAX 的页面定义路由映射。

控制器

  public ActionResult SessionDetails(int id, int collectionId, int sessionId) {
    var model = new LegalActsListViewModel();
    model.Setup(id, collectionId, sessionId, ApplicationContext.SessionService);
    return PartialView("LegalActsListControl", model);
    }

视图

<%: Ajax.ActionLink(session.Name, "SessionDetails", "Institution", new { id = Model.InstitutionId, collectionId = Model.CollectionId, sessionId = session.Id }, new AjaxOptions { UpdateTargetId = "session_" + session.Id, OnSuccess = "updatePlaceholder", HttpMethod = "Post", InsertionMode = InsertionMode.Replace })%>

上面的内容与默认路线图完美配合。目前我已添加路线图如下:

routes.MapRoute("Institution_Collection_Terms", 
    "institution/{id}/collection/{collectionId}/terms", 
    new { controller = "Institution", action = "Terms" }, 
    new { id = @"\d+", collectionId = @"\d+" });

PartialResult 被重定向到:

 http://localhost:9085/Institution/SessionDetails/850?collectionId=22184&sessionId=77

这是所有路线:

routes.MapRoute("Institution_Collection_Keywords",
            "institution/{id}/collection/{collectionId}/keywords",
            new { controller = "Institution", action = "Keywords" },
            new { id = @"\d+", collectionId = @"\d+" });
        //routes.MapRoute("Institution_Collection_Terms",
        //    "institution/{id}/collection/{collectionId}/terms",
        //    new { controller = "Institution", action = "Terms" },
        //    new { id = @"\d+", collectionId = @"\d+" });
        routes.MapRoute("Institution_Collection_Yearbooks",
            "institution/{id}/collection/{collectionId}/yearbooks",
            new { controller = "Institution", action = "Yearbooks" },
            new { id = @"\d+", collectionId = @"\d+" });
        routes.MapRoute("Institution_Collection_YearbookDetails",
            "institution/{Id}/collection/{collectionId}/yearbook/{year}/{month}",
            new { controller = "Institution", action = "YearbookList", month = UrlParameter.Optional },
            new { Id = @"\d+", collectionId = @"\d+", year = @"^(19|20)\d{2}$" });
        routes.MapRoute("Institution_Collection_List",
            "institution/{id}/collection/{collectionId}/list",
            new { controller = "Institution", action = "List" },
            new { id = @"\d+", collectionId = @"\d+" });
        routes.MapRoute("Institution_Collection_KeywordDetails",
            "institution/{id}/collection/{collectionId}/keyword/{keywordId}",
            new { controller = "Institution", action = "KeywordDetails" },
            new { id = @"\d+", keywordId = @"\d+", collectionId = @"\d+" });
        //routes.MapRoute("Institution_Collection_TermsDetails", 
        //    "institution/{id}/collection/{collectionId}/session/{sessionId}/details", 
        //    new { controller = "Institution", action = "SessionDetails" }, 
        //    new { id = @"\d+", sessionId = @"\d+", collectionId = @"\d+" });

        routes.MapRoute("Institution_SearchLegalActs",
            "institution/{institutionId}/searchlegalacts",
            new { controller = "Institution", action = "SearchLegalActs" },
            new { institutionId = @"\d+" });
        routes.MapRoute("Institution_Keywords",
            "institution/{id}/keywords",
            new { controller = "Institution", action = "Keywords" },
            new { id = @"\d+" });
        routes.MapRoute("Institution_KeywordDetails",
            "institution/{id}/keyword/{keywordId}",
            new { controller = "Institution", action = "KeywordDetails" },
            new { id = @"\d+", keywordId = @"\d+" });
        routes.MapRoute("Institution_Yearbooks",
            "institution/{id}/yearbooks",
            new { controller = "Institution", action = "Yearbooks" },
            new { id = @"\d+" });
        routes.MapRoute("Institution_YearbookDetails",
            "institution/{Id}/yearbook/{year}/{month}",
            new { controller = "Institution", action = "YearbookList", month = UrlParameter.Optional },
            new { Id = @"\d+", year = @"^(19|20)\d{2}$" });
        routes.MapRoute("Institution_List",
            "institution/{id}/list",
            new { controller = "Institution", action = "List" },
            new { id = @"\d+" });
        routes.MapRoute("Institution_RecentAdded",
            "institution/{id}/recentadded",
            new { controller = "Institution", action = "RecentAdded" },
            new { id = @"\d+" });
        routes.MapRoute("Institution_MostPopular",
            "institution/{id}/mostpopular",
            new { controller = "Institution", action = "MostPopular" },
            new { id = @"\d+" });
        routes.MapRoute("Institution_Default",
            "institution/{id}",
            new { controller = "Institution", action = "Keywords" });

        routes.MapRoute("Home_LegalActs",
            "legalacts",
            new { controller = "Home", action = "LegalActs" });
        routes.MapRoute("Home_Institutions",
            "institutions",
            new { controller = "Home", action = "Institutions" });
        routes.MapRoute("Home_Voivodeship",
            "voivodeship/{voivodeship}",
            new { controller = "Home", action = "Voivodeship" });
        routes.MapRoute("Home_Journals",
            "journals/{view}",
            new { controller = "Home", action = "Journals" });
        routes.MapRoute("Home",
            "{controller}",
            new { controller = "Home", action = "Index" });

        routes.MapRoute("Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional });

提前致谢, 莱谢克

everything works fine till I haven't defined route map for page having AJAX.

Controller

  public ActionResult SessionDetails(int id, int collectionId, int sessionId) {
    var model = new LegalActsListViewModel();
    model.Setup(id, collectionId, sessionId, ApplicationContext.SessionService);
    return PartialView("LegalActsListControl", model);
    }

View

<%: Ajax.ActionLink(session.Name, "SessionDetails", "Institution", new { id = Model.InstitutionId, collectionId = Model.CollectionId, sessionId = session.Id }, new AjaxOptions { UpdateTargetId = "session_" + session.Id, OnSuccess = "updatePlaceholder", HttpMethod = "Post", InsertionMode = InsertionMode.Replace })%>

This above works perferct with default route map. In the moment I have added route map as below:

routes.MapRoute("Institution_Collection_Terms", 
    "institution/{id}/collection/{collectionId}/terms", 
    new { controller = "Institution", action = "Terms" }, 
    new { id = @"\d+", collectionId = @"\d+" });

PartialResult is redirected to:

 http://localhost:9085/Institution/SessionDetails/850?collectionId=22184&sessionId=77

Here are all routes:

routes.MapRoute("Institution_Collection_Keywords",
            "institution/{id}/collection/{collectionId}/keywords",
            new { controller = "Institution", action = "Keywords" },
            new { id = @"\d+", collectionId = @"\d+" });
        //routes.MapRoute("Institution_Collection_Terms",
        //    "institution/{id}/collection/{collectionId}/terms",
        //    new { controller = "Institution", action = "Terms" },
        //    new { id = @"\d+", collectionId = @"\d+" });
        routes.MapRoute("Institution_Collection_Yearbooks",
            "institution/{id}/collection/{collectionId}/yearbooks",
            new { controller = "Institution", action = "Yearbooks" },
            new { id = @"\d+", collectionId = @"\d+" });
        routes.MapRoute("Institution_Collection_YearbookDetails",
            "institution/{Id}/collection/{collectionId}/yearbook/{year}/{month}",
            new { controller = "Institution", action = "YearbookList", month = UrlParameter.Optional },
            new { Id = @"\d+", collectionId = @"\d+", year = @"^(19|20)\d{2}$" });
        routes.MapRoute("Institution_Collection_List",
            "institution/{id}/collection/{collectionId}/list",
            new { controller = "Institution", action = "List" },
            new { id = @"\d+", collectionId = @"\d+" });
        routes.MapRoute("Institution_Collection_KeywordDetails",
            "institution/{id}/collection/{collectionId}/keyword/{keywordId}",
            new { controller = "Institution", action = "KeywordDetails" },
            new { id = @"\d+", keywordId = @"\d+", collectionId = @"\d+" });
        //routes.MapRoute("Institution_Collection_TermsDetails", 
        //    "institution/{id}/collection/{collectionId}/session/{sessionId}/details", 
        //    new { controller = "Institution", action = "SessionDetails" }, 
        //    new { id = @"\d+", sessionId = @"\d+", collectionId = @"\d+" });

        routes.MapRoute("Institution_SearchLegalActs",
            "institution/{institutionId}/searchlegalacts",
            new { controller = "Institution", action = "SearchLegalActs" },
            new { institutionId = @"\d+" });
        routes.MapRoute("Institution_Keywords",
            "institution/{id}/keywords",
            new { controller = "Institution", action = "Keywords" },
            new { id = @"\d+" });
        routes.MapRoute("Institution_KeywordDetails",
            "institution/{id}/keyword/{keywordId}",
            new { controller = "Institution", action = "KeywordDetails" },
            new { id = @"\d+", keywordId = @"\d+" });
        routes.MapRoute("Institution_Yearbooks",
            "institution/{id}/yearbooks",
            new { controller = "Institution", action = "Yearbooks" },
            new { id = @"\d+" });
        routes.MapRoute("Institution_YearbookDetails",
            "institution/{Id}/yearbook/{year}/{month}",
            new { controller = "Institution", action = "YearbookList", month = UrlParameter.Optional },
            new { Id = @"\d+", year = @"^(19|20)\d{2}$" });
        routes.MapRoute("Institution_List",
            "institution/{id}/list",
            new { controller = "Institution", action = "List" },
            new { id = @"\d+" });
        routes.MapRoute("Institution_RecentAdded",
            "institution/{id}/recentadded",
            new { controller = "Institution", action = "RecentAdded" },
            new { id = @"\d+" });
        routes.MapRoute("Institution_MostPopular",
            "institution/{id}/mostpopular",
            new { controller = "Institution", action = "MostPopular" },
            new { id = @"\d+" });
        routes.MapRoute("Institution_Default",
            "institution/{id}",
            new { controller = "Institution", action = "Keywords" });

        routes.MapRoute("Home_LegalActs",
            "legalacts",
            new { controller = "Home", action = "LegalActs" });
        routes.MapRoute("Home_Institutions",
            "institutions",
            new { controller = "Home", action = "Institutions" });
        routes.MapRoute("Home_Voivodeship",
            "voivodeship/{voivodeship}",
            new { controller = "Home", action = "Voivodeship" });
        routes.MapRoute("Home_Journals",
            "journals/{view}",
            new { controller = "Home", action = "Journals" });
        routes.MapRoute("Home",
            "{controller}",
            new { controller = "Home", action = "Index" });

        routes.MapRoute("Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional });

Thanks in advance,
Leszek

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文