操作参数命名

时间:2010-01-08 20:46:42

标签: c# asp.net-mvc asp.net-mvc-routing

使用提供的默认路由,我被迫将参数命名为“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
}

4 个答案:

答案 0 :(得分:48)

使用[Bind]属性:

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

答案 1 :(得分:0)

这仍然有效,你的查询字符串看起来就像“/ Controller / ByAlias?alias = something”。

答案 2 :(得分: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

答案 3 :(得分:0)

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

例如,给定此控制器方法......

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

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

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

...您可以在控制器操作方法中使用您希望的ID参数的任何命名约定。您需要做的就是将新名称解析为默认名称,无论是“id”,“别名”还是其他。

以上示例应解析为:

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