[英]Asp.net MVC 4 Url Resource cannot be found
在我的索引页面中,我使用以下内容生成URL
@foreach(var c in ViewBag.cities)
{
<li>@Html.ActionLink((string)c.CityName,"somepage",new{city=c.CityName, id=c.Id})</li>
}
以下列格式为每个城市生成了网址
localhost:55055/1/city1
localhost:55055/2/city2
...
其中1,2是Id和city1,city2是CityName
我已将路线配置为
routes.MapRoute(
name: "CityRoute",
url: "{id}/{city}",
defaults: new { controller = "Home", action = "somepage", id = UrlParameter.Optional, city = UrlParameter.Optional }
);
Home Controller中的somepage
动作方法:
public string somepage(int id, string city)
{
return city + " " + id;
}
即使我试过这个
public string somepage()
{
return "Hello";
}
但它导致Resource cannot be found
我尝试将断点放在从未被击中的sompage
中。
任何建议
更新
正如@KD在下面的评论中指出的那样,我改变了路线顺序并将上述规则置于所有规则之上。 我也改变了方法
public ActionResult somepage(int id=0, string city="")
{
return Content(city + " " + id);
}
现在行为已更改并且默认规则
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
不用于普通索引页面。 而是使用此用法,因为方法somepage
的断点被命中,如果我在浏览器中放入http://localhost:55055/2/cityname
,页面会显示id和cityname。 但现在默认路由不用于应用程序主页http://localhost:55055/
您的新路线和默认路线模式的模式几乎相同,因此它将始终产生冲突以匹配这些路线。将您的路线更改为以下
routes.MapRoute(
name: "CityRoute",
url: "CitySearch/{id}/{city}",
defaults: new { controller = "Home", action = "somepage", id = UrlParameter.Optional, city = UrlParameter.Optional }
);
即为您的模式添加一些前缀,以便它可以轻松识别..像“CitySearch”,然后提供您的路线名称,同时为它提供行动链接..
或者,如果您不想为它添加前缀,那么请执行以下操作,它将像魅力一样工作。
对于您的CityRoute,为Id添加一个Route Constraint,它将检查ID字段是否为Integer。 对于普通的URL,它将返回false,因此您的默认路由将被评估...试试这个......
routes.MapRoute(
name: "CityRoute",
url: "{id}/{city}",
defaults: new { controller = "Home", action = "somepage", id = UrlParameter.Optional, city = UrlParameter.Optional },
constraints: new {id = @"\d+"}
);
这是正则表达式约束..将此路线放在顶部并检查。
由于您尚未定义Action,因此不会调用它,因此会出现错误
尝试这个,
public ActionResult somepage(int id, string city)
{
return Content(city + " " + id);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.