J'ai un ensemble de contrôles déroulants sur une vue qui sont liés à deux listes.
//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" />
<% } %>
Donc, il envoie une requête sur la même page (car il n'est vraiment là que pour fournir un autre moyen de définir/mettre à jour les listes déroulantes appropriées, cela est acceptable car il sera tous remplacé par javascript).
L'URL en cliquant est quelque chose comme ...
http://localhost:1689/?country=FRA®ions=117
Les régions dépendent du code du pays.
J'essaie de réaliser ce bit sans se soucier du routage car il n'y a pas vraiment d'intérêt en ce qui concerne cette fonction.
Le contrôleur a donc la méthode suivante.
public ActionResult Index(string country, int regions)
La chaîne doit être correcte, car elle sera transmise sous forme de chaîne vide. Pour int, rendez-le nul:
public ActionResult Index(string Country, int? Regions)
De plus, vous remarquerez que je l'ai capitalisé de la même manière que votre chaîne de requête.
Modifier
Notez qu'ASP.NET vous permet désormais de définir des paramètres par défaut. Par exemple.:
public ActionResult Index(string Country, int Regions = 2)
Cependant, à mon humble avis, je vous recommande d'utiliser uniquement la valeur par défaut lorsque cela a un sens sémantique. Par exemple, si l'objectif du paramètre Régions était de définir le nombre de régions dans un pays et que la plupart des pays ont 2 régions (Nord et Sud), la définition d'une valeur par défaut est logique. Je n'utiliserais pas un "nombre magique" qui signifie un manque d'entrée (par exemple, 999 ou -1) - à ce stade, vous devez simplement utiliser null
.
Je sais que c'est assez ancien, mais pour la postérité, il est important de noter qu'à partir de C # 2010 (aka 4.0, publié avec .NET 4), vous pourriez utiliser un argument facultatif si vous vouliez éviter le - pièges potentiels qui viennent avec les types nullables . La signature de votre méthode ressemblerait à ceci:
public ActionResult Index(string Country, int Regions = -1)