mvc中定义的路由返回错误的路径

时间:2016-08-02 05:57:59

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

我有这些网址:

http://localhost:7708/Product/Search/89737497
http://localhost:7708/Product/Search

为此我在Action和Controller中设置了Route属性,如下所示:

[RoutePrefix("Product")]
public partial class ProductController : BaseController
{
    [Route("Search/{categoryCode}")]
    public virtual async Task<ActionResult> Index(int? categoryCode)
    {
    }
}

但我不发送给Index行动,发送给GetProductDetail(code)并返回:

  

参数字典包含非可空类型'System.Int32'的参数'code'的空条目,用于方法'System.Web.Mvc.ActionResult GetProductDetail(Int32)'

我在routeConfig类中定义了这个,但它不起作用:

         routes.MapRoute(
           name: "Search",
           url: "Product/Search/{categoryCode}",
           defaults: new { categoryCode = UrlParameter.Optional }
         );

我在浏览器的地址栏中输入了这些网址,并返回该错误。

我有这个来生成网址:

<a href="@Url.Action(MVC.Product.Index(child.Code.ToUrlEncription()))">@child.Name </a>

以上代码生成此网址:

localhost:7708/Product?categoryCode=121212

我该怎么做?

1 个答案:

答案 0 :(得分:1)

对于路线配置文件,您应声明此路线的默认操作+控制器:

routes.MapRoute(
           name: "Search",
           url: "Product/Search/{categoryCode}",
           defaults:  controller = "Product", action = "Index", categoryCode = UrlParameter.Optional
         );

对于自定义路线,您应该确保您的路线配置具有以下代码:

public static void RegisterRoutes(RouteCollection routes) {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    //This will map routes from Route attribute.
    routes.MapMvcAttributeRoutes();

    // ...
}