Добавление собственного HtmlHelper в ASP.NET MVC 3

Я новичок в MVC, и я пытаюсь создать свой собственный метод расширения, чтобы я мог добавить к помощникам HTML, которые доступны в моих представлениях бритвы. Html.DropDownListFor () позволяет создать раскрывающийся список для любого свойства вашей модели. Я хотел бы создать помощник под названием Html.StateDropDownListFor () , который делает то же самое, за исключением загрузки раскрывающегося списка со всеми 50 штатами США. Таким образом, мне не нужно создавать SelectList для каждого отдельного выпадающего списка состояний, который я создаю. Как это сделать проще всего? Прямо сейчас у меня есть это:

public static class ExtensionMethods
{
    public static MvcHtmlString StateDropDownList(this HtmlHelper html)
    {
        // ???
    }
}

Я хоть близко? Я не хочу перестраивать весь помощник текстового поля, я просто хочу создать помощник, который использует существующий помощник текстового поля, но выполняет за меня SelectList. Таким образом, на мой взгляд, я мог бы просто сделать Html.StateDropDownList (x => x.State)

Ваши ответы очень ценю.

Вот ответ!

Вы, ребята, очень помогли, спасибо ты! Вот завершенный метод расширения на тот случай, если кто-то еще когда-нибудь им воспользуется.

    public static MvcHtmlString StateDropDownListFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
    {
        Dictionary<string, string> stateList = new Dictionary<string, string>()
        {
            {"AL"," Alabama"},
            {"AK"," Alaska"},
            {"AZ"," Arizona"},
            {"AR"," Arkansas"},
            {"CA"," California"},
            {"CO"," Colorado"},
            {"CT"," Connecticut"},
            {"DE"," Delaware"},
            {"FL"," Florida"},
            {"GA"," Georgia"},
            {"HI"," Hawaii"},
            {"ID"," Idaho"},
            {"IL"," Illinois"},
            {"IN"," Indiana"},
            {"IA"," Iowa"},
            {"KS"," Kansas"},
            {"KY"," Kentucky"},
            {"LA"," Louisiana"},
            {"ME"," Maine"},
            {"MD"," Maryland"},
            {"MA"," Massachusetts"},
            {"MI"," Michigan"},
            {"MN"," Minnesota"},
            {"MS"," Mississippi"},
            {"MO"," Missouri"},
            {"MT"," Montana"},
            {"NE"," Nebraska"},
            {"NV"," Nevada"},
            {"NH"," New Hampshire"},
            {"NJ"," New Jersey"},
            {"NM"," New Mexico"},
            {"NY"," New York"},
            {"NC"," North Carolina"},
            {"ND"," North Dakota"},
            {"OH"," Ohio"},
            {"OK"," Oklahoma"},
            {"OR"," Oregon"},
            {"PA"," Pennsylvania"},
            {"RI"," Rhode Island"},
            {"SC"," South Carolina"},
            {"SD"," South Dakota"},
            {"TN"," Tennessee"},
            {"TX"," Texas"},
            {"UT"," Utah"},
            {"VT"," Vermont"},
            {"VA"," Virginia"},
            {"WA"," Washington"},
            {"WV"," West Virginia"},
            {"WI"," Wisconsin"},
            {"WY"," Wyoming"},
            {"AS"," American Samoa"},
            {"DC"," District of Columbia"},
            {"FM"," Federated States of Micronesia"},
            {"MH"," Marshall Islands"},
            {"MP"," Northern Mariana Islands"},
            {"PW"," Palau"},
            {"PR"," Puerto Rico"},
            {"VI"," Virgin Islands"},
            {"GU"," Guam"}
        };
        return html.DropDownListFor(expression, new SelectList(stateList, "key", "value"));
    }

Я изменил приведенный выше код, чтобы использовать словарь для сокращений состояний.

Только не забудьте сослаться на System.Web. Mvc.Html в верхней части класса метода расширения, как я забыл, о!

47
задан Chev 19 February 2011 в 19:14
поделиться