1

我正在尝试以保留原始功能的方式扩展 DropDownListFor,但如果给定的选定值为 Null,则将功能添加到 SelectListItem 列表的新值中,例如“选择一个项目”。

你会怎么做?

编辑:(我一开始并不清楚)

如果我们查看默认的 DropDownListFor 行为,扩展会获取一个 SelectItems 列表和“selected”值。在我的应用程序中,有时“选定”值为 Null,因此未从 SelectItems 列表中选择任何选项。我想以这样的方式更改默认行为,如果我的“选定”值为 Null,则 DropDown 将自动添加一个新值,例如“选择一个项目”并将其选择为“选定”。

希望现在好多了:)

谢谢

4

1 回答 1

2

好的,做到了!供将来参考这里是解决方案:

我为 DropDownListFor 创建了一个扩展方法:

public static MvcHtmlString KeywordDropDownListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression,
                                                   IEnumerable<SelectListItem> selectList, object htmlAttributes)
{
    Func<TModel, TValue> method = expression.Compile();
    string value = method(helper.ViewData.Model) as string;

    if (String.IsNullOrEmpty(value))
    {
        List<SelectListItem> newItems = new List<SelectListItem>();
        newItems.Add(new SelectListItem
        {
            Selected = true,
            Text = Strings.ChooseAKeyword,
            Value = String.Empty
        });
        foreach (SelectListItem item in selectList)
        {
            newItems.Add(item);
        }

        return helper.DropDownListFor(expression, newItems, htmlAttributes);
    }

    return helper.DropDownListFor(expression, selectList, htmlAttributes);
}
于 2013-10-24T08:58:09.633 回答