Microsoft改变了在ASP.NET MVC 3中传递字符串作为参数的方式吗?

时间:2011-01-25 16:11:35

标签: asp.net-mvc-3

我有这个简单的问题。以前,当我想用​​一个参数调用一个控制器方法时,我可以简单地调用/ControllerName/Method/Parameter,无论这个参数是什么类型。现在,我使用整数值做同样的事情没有问题,但是使用字符串它不起作用。我疯了还是微软真的改变了这个?

2 个答案:

答案 0 :(得分:0)

您在Global.aspx.cs中找到的默认路由仍然如下:

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

所以你的“参数”是上面例子中的{id},可能是ID往往是一个数字。了解你的路线,他们很有趣!链接:http://www.asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs

答案 1 :(得分:0)

我想象你的行为对int看起来像这样:

public ActionResult Index(int id)

如果你想接受一个字符串参数而不是一个整数并让它成为(默认)路由的一部分,那么它也需要在方法签名中命名为id,如下所示:

public ActionResult Index(string id)

如果你的行为有这样的签名:

public ActionResult Post(string slug)

然后使用默认路由slug只有一个值,如果你有一个使用键get的查询字符串(post)或表单(slug)值。一个匹配上述操作并且填充slug参数的路由(假设它是BlogController控制器的方法)将是:

routes.MapRoute(
    "BlogPost",                                             
    "post/{slug}",                           
    new { controller = "Blog", action = "Post", slug = "" }  
);