我试图设置Razor DropDownListFor控件的值。我已经尝试了几乎所有我能想到的方法来设置所选的值(在渲染控件之后使用js,这实际上是最后的手段),但是当控件呈现时它仍然没有显示所选的值。我可以假设我错过了一些非常明显的东西。这是代码:
@{
List<string> arrTitles = new List<string>("Mr,Mrs,Miss,Ms,Dr,Lady,Lord,Prof,Rev,Sir".Split(','));
List<SelectListItem> lstTitle = new List<SelectListItem>();
foreach (string title in arrTitles)
{
SelectListItem sli = new SelectListItem { Text = title, Value = title };
if (Model != null)
{
if (title == Model.title)
{
sli.Selected = true;
}
}
lstTitle.Add(sli);
}
string formHandler = ViewBag.FormHandler;
}
@using (Html.BeginForm(formHandler, "Home", FormMethod.Post))
{
@Html.LabelFor(r => r.title)
@Html.DropDownListFor(r => r.title, new SelectList(lstTitle, "Value", "Text", "Selected"));
}
有什么想法吗?
答案 0 :(得分:0)
尝试使用
@Html.DropDownList("1stTitle")
其中标题是
ViewBag.Title = new selectlist(1stTitle);
有关详细信息,请参阅页面中间的this article。
在您的控制器中,添加如下内容:
var Title= new List<string>();
var listOfTitles= //place list of titles here
Title.AddRange(listOfTitles.Distinct());
ViewBag.personsTitle = new SelectList(Title);
然后,在您看来:
@using (Html.BeginForm()
{
<p>
title: @Html.DropDownList("personsTitle ", "All")
<input type="submit" value="Filter" />
</p>
}
这比 MVC 更好,因为它可以使您的控制器代码远离您的视图(这应该只是用于查看代码的结果)。< / p>
您的实际选择&#39;代码应始终保存在您的控制器中,因为在服务器而不是客户端上进行任何计算要好得多/快得多。
答案 1 :(得分:0)
尝试以下内容:
@{
List<string> arrTitles = new List<string>("Mr,Mrs,Miss,Ms,Dr,Lady,Lord,Prof,Rev,Sir".Split(','));
List<SelectListItem> lstTitle = new List<SelectListItem>();
string selected = null;
foreach (string title in arrTitles)
{
SelectListItem sli = new SelectListItem { Text = title, Value = title };
if (Model != null)
{
if (title == Model.title)
{
selected = title;
}
}
lstTitle.Add(sli);
}
string formHandler = ViewBag.FormHandler;
}
@using (Html.BeginForm(formHandler, "Home", FormMethod.Post))
{
@Html.LabelFor(r => r.title)
@Html.DropDownListFor(r => r.title, new SelectList(lstTitle, "Value", "Text", selected));
}