我在这里读到:Routing with Multiple Parameters using ASP.NET MVC。但在我的情况下仍然没有奏效。
我有EmitenController
,其功能如下:
public async Task<ActionResult> Financial(string q = null, int page = 1)
首次加载时,此函数生成的网址为Emiten/Financial?q=&page=1
。
当然是下一页Emiten/Financial?q=&page=2
。
如果我将该网址变为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页时,网址仍为Emiten/Financial?q=&page=2
,如果我给q
空值,那该网址会如何?
提前致谢。
答案 0 :(得分:0)
如果路线是针对特定的操作方法,则应直接在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,
}
);
在您的操作方法中,您不需要指定默认值,因为您已在路径配置中执行此操作。
public async Task<ActionResult> Financial(string q, int page)
让我知道它对你有用吗</ p>
<强>更新强>
生成相对于路径的链接
@Html.RouteLink(
linkText: "Next Page",
routeName: "Financial",
routeValues: new { controller = "Emiten", action = "Financial", q = ViewBag.SearchKey, page = nextPage})
相关链接:What's the difference between RouteLink and ActionLink in ASP.NET MVC?
答案 1 :(得分:0)
我似乎无法重现您的问题。您确定在默认路线之前映射了财务路线吗?
这是我的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();
}
}
(我知道在这种情况下async是无用的,但你不能等待ViewResult) 以下是视图:
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>
一切都按预期工作