0

Html.DropDownList 是否存在重载,它将模型中的值显示为当前选定的项目?在我看来,我使用 as using 语句插入模型

 @using SchoolIn.Models

然后我像这样访问模型:

        if (Model.Enrollments != null)
        {   
            @Html.DropDownList("searchString", Model.Enrollments.FirstOrDefault().weekDays.Select(s => new SelectListItem { Text = s.ToString(), Value = s.ToString() }))   
        }

这是我的模型中的代码:

 public virtual string classDays { get; set; }
 public string[] weekDays = new string[6]          { "Day", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };
 public string[] WeekDays
 {
 get { return weekDays; }

当我的视图加载时,它会显示一个我可以从中选择的下拉列表,我选择一天并保存选择,但是当它再次加载时,我希望之前选择的项目成为列表中的默认选择。我怎样才能做到这一点?我真的很感激任何帮助,谢谢。

4

3 回答 3

0

您可能需要使用 DropDownListFor 而不是 DropDownList。这是来自MSDN的构造函数定义。还有五个重载。

public static MvcHtmlString DropDownListFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    IEnumerable<SelectListItem> selectList
)
于 2012-09-27T05:00:02.073 回答
0

看起来您应该能够Selected在适当的项目上进行设置:

@{
    var Items = Model.Enrollments.FirstOrDefault().weekDays.Select(s => 
        new SelectListItem { Text = s.ToString(), Value = s.ToString() 
            Selected = s.ToString().Equals(PreviouslySelectedValue)
        } 
    );
}
@Html.DropDownList("searchString", Items)   

您也可以使用DropDownListFor,它应该将所选项目设置为属性的值。

@Html.DropDownListFor(model => PreviouslySelectedValue, Items)
于 2012-09-27T05:03:54.757 回答
0

试试这个扩展方法:

public static IEnumerable<SelectListItem> SetSelected(this IEnumerable<SelectListItem> selectList, object selectedValue)
{
    selectList = selectList ?? new List<SelectListItem>();
    if (selectedValue == null)
        return selectList;
    var vlaue = selectedValue.ToString();
    return selectList.BuildList(m => m.Text, m => m.Value, null, m => String.Equals(m.Value, vlaue, StringComparison.CurrentCultureIgnoreCase));
}

然后你可以在你的视图中这样调用它:

@Html.DropDownListFor(model => model.CategoryId, ((IEnumerable<SelectListItem>)ViewData["Categories"]).SetSelected(model.CategoryId))
于 2012-09-27T06:48:11.907 回答