路由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
空值?
我似乎无法重现您的问题。你确定在你的默认路径之前已经映射了你的财务路径吗?
下面是我的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吗?