搜索" DropDownList的默认值"产生结果,这不是一个重复的问题,因为我搜索的示例和答案中没有列出具体问题。
首先是主要问题,然后是支持背景和细节:
当我将DropdownList放在Html.BeginForm块中时,如何将默认的DropDownList值设为项目 other 而不是列表中的第一项? < / p>
到目前为止我做了什么:
Html.DropDownList
的重载情况。 optionLabel
参数在列表的最顶部插入一个项目,例如&#34;选择一个项目&#34;,这是不希望的行为。我的工作理论: 我学到的方法(如下所示)不允许使用默认值,也不是不知道{的特定重载的情况{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());
}
这个问题有一个简单的答案,还是需要完全不同的方法?
答案 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)