2013-03-12 65 views
1

在我的索引页,我使用生成URL以下Asp.net MVC 4网址资源无法找到

@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生成的URL为每个城市,2是Id和city1,城2是CITYNAME

我已经配置为

routes.MapRoute(
      name: "CityRoute", 
      url: "{id}/{city}", 
      defaults: new { controller = "Home", action = "somepage", id = UrlParameter.Optional, city = UrlParameter.Optional } 
      ); 
01的路线

在家庭控制器的somepage操作方法:

public string somepage(int id, string city) 
{ 
    return city + " " + id; 
} 

即使我想这

public string somepage() 
{ 
    return "Hello"; 
} 

,但它会导致Resource cannot be found

我试图把断点sompage这是从来没有击中。

任何suggesstions

更新

正如评论所指出的@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和城市名。但现在默认路由不用于申请家庭http://localhost:55055/

+1

请更新您的标题与您的具体问题.. – 2013-03-12 08:43:42

+0

请确保您添加正确的顺序路线。您添加的路线应位于默认路线的顶部。 – 2013-03-12 08:45:30

+0

也试试这个动作方法public ActionResult somepage(string id,string city) – 2013-03-12 08:46:35

回答

4

新的模式路线和缺省路由的模式几乎是相同的,因此它总是会产生冲突,以匹配路线..改变你的路线以下

routes.MapRoute(
      name: "CityRoute", 
      url: "CitySearch/{id}/{city}", 
      defaults: new { controller = "Home", action = "somepage", id = UrlParameter.Optional, city = UrlParameter.Optional } 
      ); 

即增加一些前缀为您的图案,使它能够很容易识别..像“CitySearch的” ,然后提起您的路由名称,同时提供操作链接,它..

或者,如果你不想添加前缀它然后做下面的事情,它将像一个魅力工作..

为您的CityRoute添加一个路由约束为Id将检查ID字段是否为整数。对于正常的URLS它将返回false,因此你的默认路由将得到评估...试试这个...

routes.MapRoute(
      name: "CityRoute", 
      url: "{id}/{city}", 
      defaults: new { controller = "Home", action = "somepage", id = UrlParameter.Optional, city = UrlParameter.Optional }, 
      constraints: new {id = @"\d+"} 
      ); 

这是正则表达式约束条件..把这条路线放在顶部并检查。

+0

+1是的我同意,因为所有其他链接现在指向'somepage'。 ''\ d +“肯定是冲突 – ZedBee 2013-03-12 09:22:02

+0

它说无法识别的转义序列 – ZedBee 2013-03-12 09:29:31

+0

尝试@”\ d +“来转义 – 2013-03-12 09:42:33

0

由于您没有定义的动作也不会叫这样的错误来了

试试这个,

public ActionResult somepage(int id, string city) 
    { 
     return Content(city + " " + id); 
    }