![](/img/trans.png)
[英]ASP.NET MVC 5 Attribute Routing: Url.Action returns null when using multiple parameters
[英]asp.net mvc multiple parameters to an action, routing problem
我的问题是我给我的动作3个参数(类别,城市,页面),其中一些可能是null因为我需要进行3次过滤:
(category != null && city == null)
(category == null && city != null)
(category != null && city != null)
我的问题是在路由上。 当(category != null && city == null)
它不起作用。 它从我的动作空值给出类别参数,我的城市参数接收类别的值。
我的Global.asax:
routes.MapRoute(
"ListByCity",
"Advertisers/{city}/{page}",
new { controller = "Advertisers", action = "List" }
);
routes.MapRoute(
"ListByCategory",
"Advertisers/{category}/{page}",
new { controller = "Advertisers", action = "List" }
);
routes.MapRoute(
"List",
"Advertisers/{category}/{city}/{page}",
new { controller = "Advertisers", action = "List" }
);
请帮我。
以相反的方式思考问题。 如果您有URL http:// YourServer / Advertisers / Text您如何知道该文本是类别还是城市? 您可以使用正则表达式解决匹配问题,但城市和类别都是字符串,因此您无法告知路由系统要匹配哪个。 您将不得不区分它们。 也许创建一个匹配/ Advertisers / Categories / {category}和其他匹配/ Advertisers / Cities / {city}的路线。
这对我来说更像是三个独立的行为:
/Advertisers/List/{category}/{city}/{page}
/Advertisers/ListByCity/{city}/{page}
/Advertisers/ListByCategory/{category}/{page}
这些都可以在您的控制器中调用通用方法来为列表视图准备模型。
编辑:
或者你需要添加一个名为“all”的类别和一个名为“all”的城市,然后你可以只走一条路线:
/Advertisers/List/{category}/{city}/{page}
我同意@MCL的编辑。.我认为您也可以采取这种方法而无需采取任何措施。
/Advertisers/All/NewYork/1
/Advertisers/SomeCategory/NewYork/2
您可以按照以下方式设置路线:
routes.MapRoute(
"List",
"Advertisers/{category}/{city}/{page}",
new { controller = "Advertisers", action = "List" });
你的行动会看起来像这样:
public ActionResult List ( string category, string city, int page ) { .. }
在这种情况下,我也不同意查询字符串。 它的确很容易,但是我觉得这个URI模式将成为您应用程序的核心部分,而从长远来看,如果不为其设置适当的路由系统,将会阻碍您的工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.