Как использовать необязательные параметры в контроллере ASP.NET MVC - PullRequest
38 голосов
/ 13 июля 2009

У меня есть набор раскрывающихся элементов управления в представлении, которые связаны с двумя списками.

//control
ViewData["Countries"] = new SelectList(x.getCountries().ToList(), "key","value",country);
ViewData["Regions"] = new SelectList(x.getRegions(country).ToList(), "id", "name", regions);

/*
on the view
*/

<% using (Html.BeginForm("","", FormMethod.Get))
           { %>
           <ol>
               <li>
                <%= MvcEasyA.Helpers.LabelHelper.Label("Country", "Country:")%>
                <%= Html.DropDownList("Country", ViewData["Countries"] as SelectList) %>
                <input type="submit" value="countryGO" class="ddabtns" />
               </li>
               <li>
                <%= MvcEasyA.Helpers.LabelHelper.Label("Regions", "Regions:")%>
                <%= Html.DropDownList("Regions", ViewData["Regions"] as SelectList,"-- Select One --") %>
                <input type="submit" value="regionsGO" class="ddabtns" />
               </li>
           </ol>     
                <br />
                <input type="submit" value="go" />
<% } %>

Таким образом, он отправляет запрос на ту же страницу (поскольку он действительно предоставляет альтернативный способ установки / обновления соответствующих раскрывающихся списков, это допустимо, поскольку все они будут заменены на JavaScript).

URL при нажатии - это что-то вроде ...

http://localhost:1689/?country=FRA&regions=117

Регионы зависят от кода страны.

Я пытаюсь достичь этого бита, не беспокоясь о маршрутизации, поскольку в этой функции нет никакого смысла.

Таким образом, у контроллера есть следующий метод.

public ActionResult Index(string country, int regions)

Ответы [ 2 ]

76 голосов
/ 13 июля 2009

Строка должна быть в порядке, так как она будет передана как пустая строка. Для int сделайте его обнуляемым:

public ActionResult Index(string Country, int? Regions)

Кроме того, вы заметите, что я использовал заглавные буквы в той же строке, что и ваша строка запроса.

Редактировать

Обратите внимание, что ASP.NET теперь позволяет вам определять параметры по умолчанию. E.g.:

public ActionResult Index(string Country, int Regions = 2)

Однако, ИМХО, я бы порекомендовал вам использовать значение по умолчанию только в том случае, если оно имеет смысловой смысл. Например, если целью параметра «Регионы» было установить количество регионов в стране, а в большинстве стран есть 2 региона (север и юг), то установка значения по умолчанию имеет смысл. Я бы не использовал «магическое число», которое означает отсутствие ввода (например, 999 или -1) - в этот момент вы должны просто использовать null.

29 голосов
/ 29 августа 2013

Я знаю, что это довольно старо, но для потомков важно отметить, что начиная с C # 2010 (он же 4.0, выпущенный с .NET 4) вы можете использовать необязательный аргумент , если вы хотите избежать потенциальные ловушки, которые могут иметь типы nullable . Ваша подпись метода будет выглядеть так:

public ActionResult Index(string Country, int Regions = -1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...