Наименование параметра действия - PullRequest
30 голосов
/ 08 января 2010

Используя маршрут по умолчанию, я вынужден назвать свои параметры "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 ]

48 голосов
/ 09 января 2010

Используйте атрибут [Bind]:

public ActionResult ByAlias([Bind(Prefix = "id")] string alias) {
    // your code here
}
0 голосов
/ 08 января 2010

Вы можете настроить маршруты с любыми идентификаторами, которые вам нравятся ..

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

Редактировать: Вот обзор с сайта ASP.NET

0 голосов
/ 09 января 2010

То, что ваш маршрут использует имя «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», «alias» или что-то еще.

Приведенный выше пример должен разрешить до:

<a href="/Mailer/Details/7">More Info</a>
0 голосов
/ 08 января 2010

Это все еще работает, ваша строка запроса будет выглядеть как "/Controller/ByAlias?alias=something".

...