Параметр идентификатора QueryString не используется - PullRequest
2 голосов
/ 27 января 2010

У меня есть очень простой проект ASP.Net MVC, в котором я хотел бы использовать имя параметра id для одного из моих действий контроллера. Из всего, что я прочитал, это не должно быть проблемой, но по какой-то причине при использовании имени параметра id не получается извлечь значение из строки запроса, но если я изменю его на любое другое имя, оно будет работать.

У меня есть только один маршрут в моем global.asx

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

Мой метод контроллера:

public ActionResult Confirm(string id)
{
     ....
}

URL-адрес http://mysite/customer/confirm/abcd работает. Сбой URL http://mysite/customer/confirm?id=abcd.

Если я изменю метод контроллера на:

public ActionResult Confirm(string customerID)
{
     ....
}

тогда работает URL http://mysite/customer/confirm?customerID=abcd.

Есть ли что-то особенное в использовании "id" в качестве параметра в строке запроса ASP.Net MVC?

Обновление: идентификатор изменен с 1234 на abcd, мои идентификаторы на самом деле являются строками.

Ответы [ 2 ]

1 голос
/ 27 января 2010

Если вы не применяете параметр id (строка запроса или POST), система просто игнорирует его, и вы можете удалить параметр «id» в вашем контроллере:

public ActionResult Confirm()

В вашем случае вы просто придерживаетесь параметра id. Зачем создавать некрасивый параметр customerID, когда id автоматически сопоставляется?

Это простой и простой пример использования параметра id.

public ActionResult Confirm(int? id)
{
     if (id.HasValue && id.Value > 0) // check the id is actually a valid int
         _customerServer.GetById(id.Value);

    // do something with the customer

    return View();
}

Это тоже работает для меня. Мы делаем это в нашем приложении прямо сейчас по стандартному маршруту:

public ActionResult Confirm(string id)
{
     if (!string.IsNullOrEmpty(id)) // check the id is actually a valid string
         _customerServer.GetByStringId(id);

    // do something with the customer

    return View();
}
1 голос
/ 27 января 2010

Если вам нужен идентификатор в строке запроса, не создавайте маршрут с параметром 'id'. Если у вас есть маршрут "{controller}/{action}", вы можете использовать public ActionResult Confirm(string id) в качестве метода вашего контроллера.

Маршруты не заботятся о строках запроса.

...