Как использовать дополнительные параметры в 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®ions=117
Регионы зависят от кода страны.
Я пытаюсь достичь этого бита, не беспокоясь о маршрутизации, поскольку нет никакой реальной точки в отношении этой функции.
Таким образом, контроллер имеет следующий метод.
public ActionResult Index(string country, int regions)
Ответы
Ответ 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)