Пользовательский DropdownFor в ASP.NET MVC2 - PullRequest
0 голосов
/ 07 декабря 2010

Я пытаюсь автоматически создавать раскрывающиеся списки в своем проекте, создавая свой собственный вспомогательный метод Html, который берет код «выпадающей группы» и автоматически создает Html. Однако это необходимо сделать при полной поддержке модели.

Мой код завершения должен выглядеть следующим образом.

<%: Html.CodeList(m => m.state, 121) %>

... где "121" - это группа кодов, которая возвращает словарь пар ключ / значение из базы данных.

Вот что у меня есть для моего вспомогательного метода Html.

    public static MvcHtmlString CodeList<T, TProp>(this HtmlHelper<T> html, Expression<Func<T, TProp>> expr, int category)
    {
        Dictionary<int, string> codeList = CodeManager.GetCodeList(category); //returns dictionary of key/values for the dropdown
        return html.DropDownListFor(expr, codeList, new Object()); //this line here is the problem
    }

Я не могу понять, как именно передать метод DropDownListFor. Я предполагаю, что я возвращаю html.DropDownListFor (), но мне не хватает чего-то очевидного. Любая помощь?

1 Ответ

1 голос
/ 07 декабря 2010

Вот и все:

public static MvcHtmlString CodeList<T, TProp>(
    this HtmlHelper<T> html, 
    Expression<Func<T, TProp>> expr, 
    int category
)
{
    var codeList = CodeManager.GetCodeList(category);

    var selectList = new SelectList(
        codeList.Select(item => new SelectListItem { 
            Value = item.Key.ToString(), 
            Text = item.Value
        }), 
        "Value", 
        "Text"
    );
    return html.DropDownListFor(expr, selectList);
}

Примечание: статические методы, такие как CodeManager.GetCodeList, очень плохи с точки зрения модульного тестирования ваших компонентов изолированно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...