Html.BeginForm块中DropDownList的默认值

时间:2016-05-03 18:05:51

标签: c# asp.net-mvc razor

搜索" DropDownList的默认值"产生结果,这不是一个重复的问题,因为我搜索的示例和答案中没有列出具体问题。

首先是主要问题,然后是支持背景和细节:

当我将DropdownList放在Html.BeginForm块中时,如何将默认的DropDownList值设为项目 other 而不是列表中的第一项? < / p>

到目前为止我做了什么:

  • SO,Microsoft虚拟学院以及使用各种搜索字词的一般互联网搜索,没有有效的答案可解决此特定问题。
  • 查看MSDNHtml.DropDownList的重载情况。 optionLabel参数在列表的最顶部插入一个项目,例如&#34;选择一个项目&#34;,这是不希望的行为。
  • jQuery, 按预期工作,但我真的希望有一种更简单的方式,不涉及jQuery。

我的工作理论: 我学到的方法(如下所示)不允许使用默认值,也不是不知道{的特定重载的情况{1}}。

背景信息:

在学习MVC 5并从教程和SO答案中收集指令的过程中,我学习了这种创建DropDownList的方式,该方法位于View中的Html.DropDownList块内。如果我希望默认值是列表中的第一项,或者如果我想在顶部插入一个表示&#34;选择项目的项目,那么它可以工作。&#34;

但是,有时候默认值不是列表中的第一个是有意义的。

在控制器中,参数的默认值设置为Html.BeginForm(),查询返回正确的结果,但是第一次加载页面时不会相应地设置DropDownLists。

控制器

Index(string campus = "MRA", string fy = "FY16")

查看 下拉菜单正常运行:提交表单时,查询结果将由选定的下拉列表值选择,下拉列表将加载选定的值。

public ActionResult Index(string campus = "MRA", string fy = "FY16")
{
    /* The ViewBags feed DropDownLists used to filter the query */
    ViewBag.CampusList = new List<string> { "CRA","DRA","MRA","PRA"};
    ViewBag.FyList = new List<string> {"FY15","FY16" };

    IEnumerable<AssociatedW3SuspensionOrProbation> query = 
            db.AssociatedW3SuspensionOrProbation
            .Where(m=>m.Campus==campus).Where(m=>m.FY==fy)
            .OrderBy(m=>m.StudentName).ThenBy(m=>m.LatestEntryDate);

    return View(query.ToList());
}        

这个问题有一个简单的答案,还是需要完全不同的方法?

1 个答案:

答案 0 :(得分:2)

你需要做的是在控制器动作中创建SelectList,并且有一个构造函数重载,可用于设置所选值,但为此你需要一个不是字符串的List<T>但是一个自定义类型,包含2个TextField属性1和1个ValueField属性。

您必须使用second Constructor overload listed here

以下是示例代码:

ViewBag.CampusList = new SelectList(
                                    new List<string> { "CRA","DRA","MRA","PRA"},
                                    campus  // selected value 
                                   );
    ViewBag.FyList = new SelectList(
                                    new List<string> {"FY15","FY16" },
                                    ,fy    // selected value
                                   );

并在您看来:

@Html.DropDownList("campus",
                ViewBag.CampusList as SelectList)

@Html.DropDownList("fy", 
                ViewBag.FyList as SelectList)