2009-09-22 75 views
0

考虑使用如此Nov. 2008 Phil Haack blog post中所述的区域约定的ASP.NET MVC 1.0项目。这个解决方案一旦建立就很好用!ASP.NET MVC:一个参数未命名为ID和非整数的操作方法

由于我对ASP.NET MVC的路由规则知之甚少,所以我的麻烦就开始了。

我的目的是创建一个操作方法和URL的结构是这样的:

http://mysite/Animals/Dogs/ViewDog/Buster

DogsController.ViewDog()看起来是这样的:

public ActionResult ViewDog(string dogName) 
{ 
    if (dogName!= null) 
    { 
     var someDog = new DogFormViewModel(dogName); //snip a bunch more 

     return View(someDog); 
    } 
    else { return View("DogNotFound"); }   
} 

眼下的任务是确保RegisterRoutes()有正确的条目。

UPDATE

这里的新路径映射:

routes.MapRoute("ViewDog", "Animals/{controller}/{action}/{dogName}", 
            new { controller = "Dogs", 
              action = "ViewDog", dogName = "" }); 

创建到URL链接:按预期的方式创建

<%= Html.RouteLink("Brown Buster", "ViewDog", new RouteValueDictionary(new { controller="Dogs", action="ViewDog", dogName="Buster" }))%>

的URL。感谢Craig Stuntz and his blog post on Html.RouteLink

http://mySite/Animals/Dogs/ViewDog/Buster

新的问题:帕拉姆dogName不皮卡从URL字符串值 “克星”。对该方法的调用成功,但参数的计算结果为null。

问题

你怎么能:

  • 化妆用细绳这条路线的工作,并删除路由的默认惯例int id我想从int改变参数的名称。
+0

默认值是id,而不是int id。路由令牌是无类型的。 – 2009-09-24 00:26:36

+0

你的路线在什么顺序中定义?此路由是否在默认路由中带有'id'? – 2010-02-16 17:28:15

回答

1

您确定ActionLink实际上是否与您向他们展示问题的路线匹配吗?如果您有多条路线,我强烈建议使用RouteLink而不是ActionLink,as I explain in great detail in this post。使用RouteLink时,至少在生成URL时,不可能匹配错误的路由。

+0

感谢克雷格。感谢这个建议。我已经使用了它,但现在存在一个新问题,即传递给方法的参数为null,即使我已经明确地将它发送到RouteLink。有什么建议么? – 2009-09-23 18:06:13

+0

现在,您正在匹配路线*中的错误路线。*获取Phil Haack的路由调试器,查看您匹配的路线。这不是你想要的。 – 2009-09-23 18:16:58

0

默认参数“id”不一定是int。它会匹配您在操作方法中声明的任何类型。为什么不只是做以下?

public ActionResult ViewDog(string id) 
{ 
    if (id!= null) 
    { 
     var someDog = new DogFormViewModel(id); //snip a bunch more 

     return View(someDog); 
    } 
    else { return View("DogNotFound"); }   
} 
相关问题