2016-02-20 31 views
0

我已经完成了MVC的路由配置。这条路线是这样定义的:在MVC控制器的路由配置后调用函数

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

的问题是,当我从视图框调用javascript函数,所有我调用该函数将被重定向到索引功能。

例如,如果我打电话var url = "/Boxes/ReturnPrice";该网站不调用此功能,但索引功能。

在boxesController指数函数这样定义:

public ActionResult Index() 
{ 

//Code here 

return view(); 

} 
+0

“ReturnPrice”的路线在哪里? –

+0

是名为public ActionResult returnPrice的boxesController中的函数,但代码从未被调用。如果我不使用routeconfig,我可以正确调用这个函数 – Ale

+0

对,所以你需要为它添加路由。看起来你只有索引路线。 –

回答

0

当你调用/Boxes/ReturnPrice,它的“盒子”路线定义相匹配。该框架将把url中的“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会去Index操作方法与价值5了ID PARAM。

+0

好吧,我已经明白了,它是正确的,但在另一个页面,我需要有名称作为参数作为字符串。我怎样才能做到这一点与字符串? – Ale

+0

我已经为箱子/ ReturnPrice添加了另一个routeConfig,现在它工作正常。非常感谢你! – Ale