路由ASP NET有两个参数无法正常工作

时间:2014-08-20 02:39:25

标签: c# asp.net asp.net-mvc asp.net-mvc-4 routing

我在这里读到: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空值,那该网址会如何?

提前致谢。

2 个答案:

答案 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>

一切都按预期工作