【发布时间】:2023-03-03 10:56:01
【问题描述】:
了解下拉列表,我尝试为 nerddinner 添加一个 RSVP 创建页面,如 Scott Gu's blog 中的 Html.DropDownListFor 列出可用的晚餐。
我可以填充下拉列表,但无法让下拉列表预先选择我想要的值(“样品晚餐 2”)。我使用初始化器在数据库中播种一些晚餐对象。该数据库是使用 EF '代码优先方法'的 sql ce 4。抱歉,我知道这是一个常见的问题,我不想问,但老实说,我在这方面花了很多时间,但无法让它发挥作用:
视图模型
public class RSVPViewModel
{
public SelectList DinnersList { get; set; }
public RSVP Rsvp { get; set; }
public string SelectedItem { get; set; }
}
控制器
//
//GET: /RSVP/Create
public ActionResult Create()
{
RSVP rsvp = new RSVP();
string selected = "Sample Dinner 2";
var typeList = new SelectList(dbc.Dinners.ToList(), "DinnerID", "Title", selected);
var viewModel = new RSVPViewModel { DinnersList = typeList, Rsvp = rsvp, SelectedItem = selected };
return View("Create", viewModel);
}
查看
@Html.DropDownListFor(model => model.Rsvp.DinnerID, Model.DinnersList)
HTML 结果
<select data-val="true" data-val-number="The field DinnerID must be a number." data-val-required="The DinnerID field is required." id="Rsvp_DinnerID" name="Rsvp.DinnerID">
<option value="1">Sample Dinner 1</option>
<option value="2">Sample Dinner 2</option>
</select>
因此,当页面加载时,不会预先选择值为“Sample Dinner 2”的下拉列表。当我做出选择并单击提交时,列表显示正常并设置了正确的 DinnerID。
也试试这个:
@Html.DropDownListFor(x => x.SelectedItem, Model.DinnersList)
但没有设置或绑定到 Rsvp.DinnerID。
这从列表中预选但不绑定(或设置 Rsvp.DinnerID)
@Html.DropDownList("DinnersList")
我想保留它 mvc3,所以想使用 ViewModel 方法(无 ViewData)实现强类型,最好使用 Html.DropDownListFor(不是 Html.DropDownList)。对于这种情况,Viewbag 似乎没有必要。
谢谢!
编辑1
认为我应该使用 selectListItems 的 selectList 我尝试了这种详细的方法:
RSVP rsvp = new RSVP();
string selected = "2";
List<SelectListItem> dinners = new List<SelectListItem>();
foreach (Dinner dinner in dbc.Dinners.ToList())
{
SelectListItem slDinner = new SelectListItem();
slDinner.Value = dinner.DinnerID.ToString();
slDinner.Text = dinner.Title;
slDinner.Selected = (slDinner.Value == selected);
dinners.Add(slDinner);
}
var dinnersList = new SelectList(dinners, "Value", "Text", selected);
var viewModel = new RSVPViewModel { DinnersList = dinnersList, Rsvp = rsvp, SelectedItem = selected };
但是仍然没有工作。我应该以某种方式使用 @Html.DropDownListFor.. 中的 ViewModel SelectedItem 属性吗?类似的东西:
@Html.DropDownListFor(x => x.SelectedItem, Model.DinnersList)
但是如何获得一个选定的值来设置 Rsvp.DinnerID。我认为这叫做绑定。
【问题讨论】:
-
单步执行代码时,
new SelectList(...)生成的列表是否有 Selected 属性为 true 的项? -
我不确定你的意思。我没有在选择列表中使用 SelectListItems,所以我没有看到 Selected 属性?此外,我在其他地方(stackoverflow.com/questions/2410543/…)读到 Selected 属性在大多数情况下被忽略(可能适用于 @html.dropdownlist("DinnerList") 但没有绑定?
-
我可以在 typeList 中看到一个 'SelectedValue' 属性,其值为 2,更改为下面的答案后类型为 int。
标签: asp.net-mvc asp.net-mvc-3 html.dropdownlistfor