2011-07-05 47 views
4

由于某种原因,无论何时我尝试在ASP.NET MVC3的本地安装中解析带有参数的URL时,参数基本上都会在我的控制器的处理函数中最终成为nullASP.NET MVC3 URL参数解析为空

例如,我有

public class HomeController : Controller 
{ 
    public ActionResult Foo(string bar) 
    { 
     ViewBag.Message = bar; 
     return View(); 
    } 
} 

,并尝试访问http://localhost/myapp/foo/sometexthttp://localhost/myapp/home/foo/sometextbar基本评估为null而不是sometext

我相当有信心,我的MVC3安装工作正常,因为我设法运行一个单独的应用程序与几天前的自定义路由规则。我有点担心,我可能会在某处或某处搞乱配置标志。

有什么想法可能是错误吗?

回答

8

默认路由映射期望在您的操作中使用名为id的参数。

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

如果你改变你的行动,这样的:

public ActionResult Foo(string id) 

它应该工作。如果更改参数名称是不可能的,您也可以尝试这样的URL:

http://localhost/myapp/home/foo/?bar=sometext 
+0

呵呵。这绝对是诀窍,谢谢。然而,我的印象是,我应该能够编写一个控制器函数,如'public ActionResult foo(string herp,string derp){}'然后*自动*通过http:// localhost/myapp/home/foo/1/2 /'或类似的东西。这是否意味着我必须根据参数数量(和参数名称)为每个使用的URL模式创建自定义路由?这听起来不太方便。 –

+0

如果没有自定义路由,您将无法通过'http:// localhost/myapp/home/foo/1/2 /'导航到类似'public ActionResult foo(string herp,string derp)但只要您有“herp”和“derp”文本框,您就可以通过HTTP POST向表单提交表单,而无需设置自定义路由。根据我的经验,在一个给定的项目中提出一些满足我所有路由需求的约定并不困难,但这取决于您的要求。 – gram

+0

是的,我想从长远来看实际上想出路由规则并不难。这只是一个难以忍受的忍受,特别是因为我的MVC体验来自CakePHP和CodeIgniter。但别介意我。 :D感谢您的帮助! –