【发布时间】:2014-09-07 02:51:29
【问题描述】:
我有一个带有 Razor 引擎的 MVC5 ASP.Net 视图。 我发现由 Html.DropdownList 创建的下拉列表会自动保留其值。下拉菜单没有模型绑定。
问题:为什么会发生这种情况?我以为我们必须将第三个参数传递给下面的 helper 以指定其所选值,但似乎我没有到。
@Html.DropDownList("SearchCondition", (IEnumerable<SelectListItem>)ViewData["SearchConditions"])
更新 1:
我的控制器动作代码如下,当带有上述下拉菜单的视图返回时调用。
public ActionResult Index(string sortOrder,
String SearchField,
String SearchCondition,
String SearchText,
String Export,
int? PageSize,
int? page,
string command)
{
ModelState.Clear();
if ((command == "Show All"))
{
SearchText = string.Empty;
}
else if (command == "Export")
{
ExportData(Export);
}
ViewData["SearchFields"] = GetFields();
ViewData["SearchConditions"] = GetNumericConditions(SearchCondition);
ViewData["Exports"] = GetExports();
ViewData["PageSizes"] = GetPageSizes();
ViewBag.CurrentSort = sortOrder;
ViewBag.OrderIDSortParm = sortOrder == "OrderID_asc" ? "OrderID_desc" : "OrderID_asc";
ViewBag.ProductIDSortParm = sortOrder == "ProductID_asc" ? "ProductID_desc" : "ProductID_asc";
ViewBag.UnitPriceSortParm = sortOrder == "UnitPrice_asc" ? "UnitPrice_desc" : "UnitPrice_asc";
ViewBag.QuantitySortParm = sortOrder == "Quantity_asc" ? "Quantity_desc" : "Quantity_asc";
ViewBag.DiscountSortParm = sortOrder == "Discount_asc" ? "Discount_desc" : "Discount_asc";
ViewBag.SearchField = SearchField;
ViewBag.SearchCondition = SearchCondition;
ViewBag.SearchText = SearchText;
ViewBag.Export = Export;
ViewBag.PageSize = PageSize;
ViewBag.FilterText = SearchText;
//SOME MORE CODE FOLLOWS below that has been omitted
int pageNumber = (page ?? 1);
return View(Query.ToPagedList(pageNumber, (PageSize ?? 5)));
}
【问题讨论】:
-
<select>的值是您的属性SearchCondition的值。如果您选择一个值,当您回发时,该值将存储在ModelState中,因此如果您返回视图,该值将被保留。 -
我已经在我的操作方法开始时添加了 ModelState.Clear() 但它仍然保留下拉的发布值。
标签: c# asp.net-mvc-5 html-helper html.dropdownlistfor