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 확장을 통해이 문제를 흥분하지만이이 기본 구현에 문제가했습니다
- 컨트롤이 아닌 위치에서, 본문 요소의 맨 위에 렌더링을 보기에 배치되어 있으며
- 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();
}
}