2010-01-08 78 views
30

使用提供的默认路由,我不得不命名我的参数“id”。这对很多控制器操作都很好,但我想在某些地方使用一些更好的变量命名。是否有某种属性可以使用,以便我的动作签名中可以包含更多有意义的变量名称?动作参数命名

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

// Action Signature: 
public ActionResult ByAlias(string alias) 
{ 
    // Because the route specifies "id" and this action takes an "alias", nothing is bound 
} 

回答

48

使用[绑定]属性:

public ActionResult ByAlias([Bind(Prefix = "id")] string alias) { 
    // your code here 
} 
+1

这是使用绑定的最好的例子,我找到了!有没有办法让这个模型属性的工作?即代替具有字符串参数的方法签名,它具有一个类作为具有如下所示的属性的参数:'[Bind(Prefix =“id”)] string Alias {get;设置;}'?这个例子不编译...我怎么修改它来编译(也是工作)? – 2011-09-08 17:00:18

0

这仍然有效,您的查询字符串将只是看起来像 “/控制器/ ByAlias?别名=东西”。

+0

我猜你说,如果我已经实际使用Html.ActionLink仍然作品意义创建我的链接,然后它会创建一个URL,正如你所描述的...如果我没有这样做,只是击中URL/Controller/ByAlias/aliashere - 我可以以某种方式将字符串别名参数绑定到“ id“片段定义在路由中? – Langdon 2010-01-08 20:59:07

+0

在我的MVC版本上,这没有奏效。它严格地期望/ {id} - 无法提供?alias = val – mmcrae 2017-12-24 03:40:52

0

您可以自定义你喜欢什么标识的路线..

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

编辑:Here's an overview from the ASP.NET site

+0

我当然可以,但是如果我仍然希望原始/ Home/Index/id起作用,我无法很好地定义/ Home/Index/alias权限之后,并期望它会受到打击。 – Langdon 2010-01-08 21:04:54

0

仅仅因为你的路由使用的ID变量名“身份证”并不意味着您必须在控制器操作方法中使用相同的名称。

例如,假设该控制器方法...

public Controller MailerController 
{ 
    public ActionResult Details(int mailerID) 
    { 
     ... 
     return View(new { id = mailerID }); 
    } 
} 

...并从视图这个动作方法调用...

<%= Html.ActionLink("More Info", "Details", new { mailerID = 7 }) %> 

...你可以使用任何命名您希望在控制器操作方法中使用ID参数。你所需要做的就是将新名称解析为默认值,不管它是“id”,“alias”还是其他。

上面的例子应该下定决心:

<a href="/Mailer/Details/7">More Info</a> 
+2

对我来说(在MVC 1.0中)如果我点击/ Mailer/Details/7,mailerID将始终为空。只要我将int mailerID更改为int id(按照Route),它可以正常工作。 – Langdon 2010-01-08 21:56:55

+3

使用'id'可以让你概括你的路线。如果没有这个,你需要一个路径来处理id的每个命名变体。 – 2010-04-14 22:41:28