gpt4 book ai didi

asp.net-mvc - asp.net mvc 3 预选 Html.DropDownListFor 不在 Nerd 晚餐中工作

转载 作者:行者123 更新时间:2023-12-03 21:48:56 27 4
gpt4 key购买 nike

了解下拉列表,我正在尝试为 nerddinner 添加一个 RSVP 创建页面,如 Scott Gu's blog使用 Html.DropDownList 列出可用的晚餐。

我可以填充下拉列表,但无法让下拉列表预先选择我想要的值(“ sample 晚餐 2”)。我使用初始化器在数据库中播种一些晚餐对象。该数据库是使用 EF '代码优先方法'的 sql ce 4。抱歉,我知道这是一个常见的问题,不想问,但老实说,我在这方面花了很多时间,但无法让它发挥作用:

查看型号

public class RSVPViewModel
{
public SelectList DinnersList { get; set; }
public RSVP Rsvp { get; set; }
public string SelectedItem { get; set; }
}

Controller
    //
//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)

但没有设置或绑定(bind)到 Rsvp.DinnerID。

这从列表中预选但不绑定(bind)(或设置 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。我认为这叫做绑定(bind)。

最佳答案

看完herehere ,终于明白HtmlDropDownlistFor是如何在下拉列表中自动选择正确的项目了根据您的型号 - 在 RSVP 中选择一个 DinnerID(dinner.dinnerID 的外键)将导致包含 Dinner.DinnerIDs 列表的下拉菜单预先选择该值。我认为 SelectList 或 ViewModel 中的 selectedValue 还不需要。

解决方案:

    //
//GET: /RSVP/Create

public ActionResult Create()
{
//automatically preselects matching DinnerID in the Dinner dropdownlist
var rsvp = new RSVP {DinnerID = 2 };

var typeList = new SelectList(dbc.Dinners.ToList(), "DinnerID", "Title");
var viewModel = new RSVPViewModel { DinnersList = typeList, Rsvp = rsvp};

return View("Create", viewModel);
}

关于asp.net-mvc - asp.net mvc 3 预选 Html.DropDownListFor 不在 Nerd 晚餐中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4800447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com