Action Parameter Naming

2020-02-19 06:26发布

Using the default route provided, I'm forced to name my parameters "id". That's fine for a lot of my Controller Actions, but I want to use some better variable naming in certain places. Is there some sort of attribute I can use so that I can have more meaningful variable names in my action signatures?

// 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条回答
我想做一个坏孩纸
2楼-- · 2020-02-19 06:49

You can customize the routes with whatever identifiers you like..

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

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

查看更多
地球回转人心会变
3楼-- · 2020-02-19 06:51

Just because your route uses the name "id" for the ID variable doesn't mean that you have to use the same name in your controller action methods.

For example, given this controller method...

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

...and this action method call from the view...

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

...you can use whatever naming convention you wish for the ID parameter in your controller action methods. All you need to do is resolve the new name to the default, whether it's "id", "alias", or whatever.

The above example should resolve to :

<a href="/Mailer/Details/7">More Info</a>
查看更多
家丑人穷心不美
4楼-- · 2020-02-19 06:55

Use the [Bind] attribute:

public ActionResult ByAlias([Bind(Prefix = "id")] string alias) {
    // your code here
}
查看更多
Fickle 薄情
5楼-- · 2020-02-19 06:58

This still works, your query string will just look like "/Controller/ByAlias?alias=something".

查看更多
登录 后发表回答