2016-09-11 2 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

신경 끄시 고 - 솔루션을 청소하고 테스트 브라우저를 새로 고침 힘뿐만 아니라 재건 몇 번이고 캐시가없고 ... 이제 모든 것이 의도 한대로 작동합니다.

(확실하지 않은 경우이 질문을 삭제하거나 누군가가 같은 시도를하고 싶다면 ... 지금 당장 떠날 것, 제거해주십시오.)