在MVC控制器中的routeconfig之后调用函数

时间:2016-02-20 15:54:35

标签: asp.net-mvc asp.net-mvc-routing

我已经使用MVC完成了路由配置。路线如此定义:

routes.MapRoute(
   name: "Box",
   url: "boxes/{id}",
   defaults: new { controller = "Boxes", action = "Index", id = UrlParameter.Optional }
);

问题在于,当我从视图框中调用javascript函数时,我调用的所有函数都被重定向到Index函数。

例如,如果我致电var url = "/Boxes/ReturnPrice";该网站不会调用此功能,而是调用索引功能。

boxController中的索引函数是这样定义的:

public ActionResult Index()
{

//Code here

return view();

}

1 个答案:

答案 0 :(得分:0)

当您致电/Boxes/ReturnPrice时,它与您的" Box"匹配路线定义。该框架将映射" ReturnPrice"从网址到id参数!

您需要定义一个路由约束,它告诉您的id属性是int类型(我假设它在您的情况下是int)。此外,您还需要确保存在通用路由定义,以便以controllername/actionmethodname格式处理正常请求。

使用正则表达式定义路径时,可以定义路径约束。

routes.MapRoute(
   name: "Box",
   url: "boxes/{id}",
   defaults: new { controller = "Boxes", action = "Index", id = UrlParameter.Optional },
   constraints: new { id = @"\d+" }
);
routes.MapRoute(
     "Default",
     "{controller}/{action}/{id}",
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

使用此Boxes/ReturnPrice将转到ReturnPrice操作方法,而Boxes/5将转到索引操作方法,其中值5设置为Id param。