繁体   English   中英

如何在ASP.NET MVC控制器中使用可选参数

[英]How do I use Optional Parameters in an 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替换)。

点击的网址就像......

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

区域取决于国家/地区代码。

我正在努力实现这一点,而不必担心路由,因为关于这个功能没有真正的意义。

因此Controller具有以下方法。

public ActionResult Index(string country, int regions)

字符串应该没问题,因为它将作为空字符串传递。 对于int,使其可为空:

public ActionResult Index(string Country, int? Regions)

另外,你会注意到我将它与你的查询字符串相同。

编辑

请注意,ASP.NET现在允许您定义默认参数。 例如:

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

但是,恕我直言,我建议你只使用它具有语义意义的默认值。 例如,如果Regions参数的目的是设置一个国家/地区的区域数量,并且大多数国家/地区都有两个区域(北部和南部),则设置默认值是有意义的。 我不会使用表示缺少输入的“幻数”(例如,999或-1) - 此时你应该使用null

我知道这是相当古老的,但对于后人来说,重要的是要注意,从C#2010(也就是4.0,与.NET 4一起发布),如果你想避免可空类型带来的潜在陷阱,你可以使用可选参数 您的方法签名如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM