Подтвердить что ты не робот

Как использовать дополнительные параметры в ASP.NET MVC Controller

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

//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)
4b9b3361

Ответ 1

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

public ActionResult Index(string Country, int? Regions)

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

Edit

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

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

Тем не менее, IMHO я бы рекомендовал использовать только по умолчанию, где он имеет смысл. Например, если целью параметра "Регионы" было установить # регионов в стране, и в большинстве стран есть 2 региона (север и юг), тогда установка значения по умолчанию имеет смысл. Я бы не использовал "магическое число", что означает отсутствие ввода (например, 999 или -1) - в этот момент вы должны просто использовать null.

Ответ 2

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

public ActionResult Index(string Country, int Regions = -1)