Я только недавно начал заниматься ASP.NET MVC 1.0 и наткнулся на замечательный MVCContrib. Первоначально я пошел по пути создания некоторых расширенных помощников HTML, но после обнаружения FluentHTML решил попробовать свои силы в создании пользовательского элемента ввода. По сути, я хочу в конечном итоге создать несколько пользовательских элементов ввода, чтобы другим разработчикам проекта, над которыми я работаю, было проще добавлять их поля ввода на страницу и отображать для них всю предпочитаемую разметку. Короче говоря, я бы хотел обернуть некоторые элементы ввода дополнительной разметкой. Например, TextBox будет заключен в <li />
.
Я создал свои пользовательские элементы ввода после ответа Тима Скотта на другой вопрос здесь: СУХОЙ в MVC View .
Итак, чтобы уточнить, я создал свой класс "TextBoxListItem":
public class TextBoxListItem : TextInput<TextBox>
{
public TextBoxListItem (string name) : base(HtmlInputType.Text, name) { }
public TextBoxListItem (string name, MemberExpression forMember, IEnumerable<IBehaviorMarker> behaviors) : base(HtmlInputType.Text, name, forMember, behaviors) { }
public override string ToString()
{
var liBuilder = new TagBuilder(HtmlTag.ListItem);
liBuilder.InnerHtml = ToString();
return liBuilder.ToString(TagRenderMode.SelfClosing);
}
}
Я также добавил его в свой класс ViewModelContainerExtensions:
public static TextBox TextBoxListItem<T>(this IViewModelContainer<T> view, Expression<Func<T, object>> expression) where T : class
{
return new TextBoxListItem(expression.GetNameFor(view), expression.GetMemberExpression(), view.Behaviors)
.Value(expression.GetValueFrom(view.ViewModel));
}
И, наконец, я также добавил его в ViewDataContainerExtensions:
public static TextBox TextBoxListItem(this IViewDataContainer view, string name)
{
return new TextBox(name).Value(view.ViewData.Eval(name));
}
Я называю это, на мой взгляд, так:
<%= this.TextBoxListItem("username").Label("Username:") %>
В любом случае, я не получаю ничего, кроме стандартного текстового поля FluentHTML, не обернутого в <li></li>
элементов.
Что мне здесь не хватает?
Большое спасибо за любую помощь.