Ответ 1
Используйте атрибут [Bind]:
public ActionResult ByAlias([Bind(Prefix = "id")] string alias) {
// your code here
}
Используя предоставленный по умолчанию маршрут, я вынужден назвать мои параметры "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
}
Используйте атрибут [Bind]:
public ActionResult ByAlias([Bind(Prefix = "id")] string alias) {
// your code here
}
Это все еще работает, ваша строка запроса будет выглядеть как "/Controller/ByAlias? alias = something".
Вы можете настроить маршруты с любыми идентификаторами, которые вам нравятся.
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{alias}", // URL with parameters
new { controller = "Home", action = "Index", alias = "" } // Parameter defaults
);
Изменить: Вот обзор с сайта ASP.NET
Просто потому, что ваш маршрут использует имя "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>