1

Я пытаюсь расширить DropDownListFor таким образом, чтобы сохранить исходную функциональность, но добавить функциональность, которая, если выбранное значение, которое дано, равно Null, к новому значению список SelectListItem, например «Выбрать элемент».Как продлить DropDownListFor() в MVC

Как вы это сделаете?

EDIT: (не ясно, в начале)

Если мы посмотрим на поведение DropDownListFor по умолчанию, расширение получает список SelectItems и «выбранного значения». В моем приложении иногда «выбранное» значение равно Null, поэтому в списке SelectItems не будет выбрана опция. Я хотел бы изменить поведение по умолчанию таким образом, что если мое «выбранное» значение равно Null, тогда DropDown автоматически добавит новое значение, например «Выбрать элемент», и выберите его как «выбранный».

Надеется, что это лучше сейчас :)

Благодарности

+0

Вы хотите, чтобы механизм проверки запрашивает у пользователя, который должен быть выбран пункт? –

+0

Нет. Просто обычный раскрывающийся список с новым элементом. Я хочу, чтобы DropDown проверил, имеет ли выбранное значение значение null, а затем добавляет этот элемент. это все – JohnMighty

+0

Зачем вы включаете нулевое значение в качестве опции для начала? Неясно, чего вы хотите достичь. – ataravati

ответ

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); 
} 
+1

Я использую код выше, но произошли следующие ошибки не содержит определения для ' DropDownListFor 'и никакого метода расширения' DropDownListFor ', принимающий первый аргумент типа' System.Web.Mvc.HtmlHelper ', может быть найден (вам не хватает директивы использования или ссылки на сборку?) –

+1

Это хороший ответ, но одна важная вещь пропущен. Вам нужно добавить System.Web.Mvc.Html; чтобы заставить его работать. – buhtla