路由asp.net与两个参数不工作

本文关键字:两个 参数 工作 asp net 路由 | 更新日期: 2023-09-27 18:18:50

我在这里读到:使用ASP的多参数路由。净MVC。但在我的情况下仍然不起作用。

我有EmitenController,它有一个这样的函数:

public async Task<ActionResult> Financial(string q = null, int page = 1)

第一次加载时,该函数生成的URL: Emiten/Financial?q=&page=1。下一页当然是Emiten/Financial?q=&page=2 .

如果我给查询URL变成:Emiten/Financial?q=query&page=1并继续

对于路线,我已经尝试过

routes.MapRoute(
   name: "Financial",
   url: "{controller}/{action}/{q}/{page}",
   defaults: new { controller = "Emiten", action = "Financial", q = "", page = 1 }
);

但是,当我尝试去第3页的URL仍然Emiten/Financial?q=&page=2和URL如何,如果我给q空值?

路由asp.net与两个参数不工作

我似乎无法重现您的问题。你确定在你的默认路径之前已经映射了你的财务路径吗?

下面是我的RegisterRoutes方法:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
        "Financial",
        "{controller}/{action}/{q}/{page}",
        new { controller = "Emiten", action = "Financial", q = string.Empty, page = 1 }
    );
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

这是控制器:

public class EmitenController : Controller
{
    public async Task<ActionResult> Financial(string q, int page)
    {
        return View();
    }
}

(我知道异步是无用的,在这种情况下,但你不能等待一个ViewResult)这里是View:

q = @Request.QueryString["q"]<br/>
page = @Request.QueryString["page"]
@Html.ActionLink("Page 2", "Financial", "Emiten", new { q = "test", page = 2 }, null)
<br/>
<a href="@Url.Action("Financial", "Emiten", new { q = "test", page = 3 })">Page 3</a>

一切正常

如果路由是针对一个特定的操作方法,那么你应该在URL设置中直接指定该操作方法

routes.MapRoute(
   name: "Financial",
   url: "Emiten/Financial/{q}/{page}", // <---- Right here
   defaults: new 
   { 
       controller = "Emiten", 
       action = "Financial", 
       q = string.Empty, // string.Empty is the same as ""
       page = 1,
   }
);

在你的action方法中,你不需要指定默认值,因为你已经在你的路由配置中做过了。

public async Task<ActionResult> Financial(string q, int page)

让我知道它是如何为你工作的

更新:

生成一个相对于路由的链接

@Html.RouteLink(
    linkText: "Next Page", 
    routeName: "Financial", 
    routeValues: new { controller = "Emiten", action = "Financial", q = ViewBag.SearchKey, page = nextPage})

相关链接:ASP中的RouteLink和ActionLink有什么区别?净MVC吗?