2016-09-11 6 views
0

В большинстве случаев при использовании расширений DevEx MVC мне приходится использовать повторяющийся код для создания элементов управления/макетов, которые я использую на регулярной основе. Например, я предпочитаю элементы с выровненными по левому краю элементами управления. В идеале, я был бы в состоянии сделать что-то вроде этого, и у него «просто работать»:HTML-расширения для обертывания других расширений

@Html.DevExpress().TextBoxFor(m => m.Notes).GetHtml() 

Однако для того, чтобы поместить надпись на левой стороне, я должен также перейти в настройки объекта для него или купол нечто гораздо более многословен, такие как:

@Html.DevExpress().TextBox(
    s => { 
     // ... 
     s.Properties.CaptionCellStyle.Width = 100; 
     // ... 
    } 
).Bind(Model.Notes).GetHtml() 

то, что я думал сделать, это создать свой собственный набор расширений, которые обертывают расширения DevEx, давая мне какие-то общие/основной настройки слоя, так что я мог что-то вроде этого:

@Html.MyComponents().TextBoxFor(m => m.Notes) 

Этот вызов, в свою очередь, вызывает DevExpress TextBoxExtension с общим набором настроек и выводит текстовое поле DevEx по желанию.

Я работал в этом до с помощью пользовательских HTML расширений (код ниже), но есть две проблемы с этой базовой реализации:

  1. управления визуализирует на самом верху элемента тела, а не в положении в котором он помещен в поле зрения, и
  2. Ошибка JavaScript «ASPxClientTextBox» не определен (это часть клиентских сценариев, которые DevEx использует с их элементами управления).

Я надеялся, что это будет простой сценарий «обернуть его и пойти». Есть ли какая-то базовая концепция этих пользовательских расширений HTML, которые мне не хватает? Или кто-нибудь знает, является ли это общим ограничением в попытке обернуть ранее существовавшие расширения другой компании?

Вот код, я реализовал (который еще не полностью конкретизированы, просто пытается доказательство концепции здесь):

public static class HtmlHelpers 
{ 
    public static MyComponentsHtmlHelpers<TModel> MyComponents<TModel>(this HtmlHelper<TModel> html) { 
     return new MyComponentsHtmlHelpers<TModel>(html); 
    } 
} 


public class MyComponentsHtmlHelpers<TModel> 
{ 

    private HtmlHelper<TModel> html; 

    public MyComponentsHtmlHelpers(HtmlHelper<TModel> html) { 
     this.html = html; 
    } 

    public MvcHtmlString TextBoxFor<TValue>(Expression<Func<TModel, TValue>> expression) { 

     var data = ModelMetadata.FromLambdaExpression(expression, html.ViewData); 
     string propertyName = data.PropertyName; 

     System.Diagnostics.Debug.WriteLine("PROPERTY NAME: " + propertyName); 

     TextBoxSettings s = new TextBoxSettings(); 
     s.Name = "textbox_" + propertyName; 
     s.Properties.Caption = propertyName; 
     s.Properties.CaptionCellStyle.Width = 100; 

     TextBoxExtension tb = new TextBoxExtension(s); 

     return tb.GetHtml(); 


    } 

} 

ответ

0

Nevermind - очистка раствора и восстановления, а также силы, освежающий тест-браузер несколько раз и убедитесь, что нет кеша и ... теперь все работает по назначению.

(не уверен, что я должен удалить этот вопрос или оставить его на случай, если кто-то захочет попробовать то же самое ... Я оставлю его сейчас, не стесняйтесь удалять)