Значение не может быть нулевым.Имя параметра: строка в asp.net mvc C # - PullRequest
1 голос
/ 04 января 2012

Я новичок в asp.net mvc. Я хочу получить строку параметров в моем URL

http://localhost/Item/ItemSpec/3431?dep=62&cat=129&tab=2

Как я могу получить значение = 3431?

Я пытался использовать HttpContext.Current.Request.QueryString["id"], но это не работает. 3431 - это идентификатор элемента, который отображается на моей странице, поэтому я использовал ["id"].

Большое спасибо.

Ответы [ 4 ]

2 голосов
/ 04 января 2012

Предполагая, что маршрут по умолчанию настроен в Global.asax ({controller}/{action}/{id}), вы можете сделать так, чтобы действие вашего контроллера приняло параметр id, и средство связывания модели по умолчанию автоматически установило его значение:

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

Если вывы хотите получить это значение идентификатора из какой-то другой части вашего кода, которая имеет доступ к HttpContext, вам нужно получить его из RouteData:

var id = HttpContext.Request.RequestContext.RouteData["id"];

RouteData доступно во всех стандартныхMVC локации.В вашем примере вы использовали статическое свойство HttpContext.Current, которое никогда не следует использовать.Я подозреваю, что вы пытаетесь получить этот идентификатор из части вашего кода, где вы не должны иметь доступ к HttpContext.Поэтому вам лучше получить это id, используя стандартные приемы, а затем передать его в качестве параметра другим частям вашего кода.

2 голосов
/ 04 января 2012

3431 является частью пути запроса, а не частью строки запроса. Вы можете использовать HttpRequest.Path, чтобы добраться до пути, но маршрутизация MVC должна позволить вам просто написать метод контроллера, который принимает идентификатор в качестве параметра. Я предлагаю вам прочитать , как настроить маршрутизацию . (Простой поиск маршрутизации ASP.NET или MVC даст вам лотов статей.)

1 голос
/ 04 января 2012

Если Item является вашим контроллером, а ItemSpec является действием, вы можете получить Id, просто набрав

public ActionResult ItemSpec(int id) { }

Вы должны настроить:

0 голосов
/ 04 января 2012

Если вы не изменили свою маршрутизацию, поэтому она по-прежнему определяется так, как это было при создании веб-проекта Asp.net MVC, тогда это должен быть один из ваших контроллеров:

public class ItemController : ControllerBase
{
    ...

    public ActionResult ItemSpec(int id, int dep, int cat, int tab)
    {
        // implementation that uses all four values
    }

    ...
}

Это, конечно, простоодно из действий в нем.Там могут быть и другие.Скорее всего, Index тот, который сгенерирован по умолчанию и также используется при маршрутизации по умолчанию ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...