【问题标题】:Why is a dropdown retaining value automatically in MVC5 Razor Engine为什么 MVC5 Razor Engine 中的下拉菜单会自动保留值
【发布时间】: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)));
      }

【问题讨论】:

  • &lt;select&gt; 的值是您的属性SearchCondition 的值。如果您选择一个值,当您回发时,该值将存储在ModelState 中,因此如果您返回视图,该值将被保留。
  • 我已经在我的操作方法开始时添加了 ModelState.Clear() 但它仍然保留下拉的发布值。

标签: c# asp.net-mvc-5 html-helper html.dropdownlistfor


【解决方案1】:

有一个模型绑定SearchCondition,然后推断出值和显示值,因为您使用的是SelectListItem 作为列表。

【讨论】:

  • 我的下拉列表未绑定到任何模型,但在我的控制器中设置了 ViewBag.SearchCondition 值。如果没有我在 Html 帮助程序中指定它会被使用吗?
【解决方案2】:

我的猜测是该值在控制器操作中的 ViewData 中被默认设置。能贴出控制器代码吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多