DevExpress: Как получить экземпляр управляющей клиентской части и получить доступ к его клиентской части? - PullRequest
2 голосов
/ 18 октября 2011

У меня есть элемент управления DateEdit от DexExpress, и мне нужно получить значение даты из него с помощью Javascript.Концептуально, я ищу что-то вроде этого:

var d = $("dpEndDate").GetDate();

Их ссылка на API указывает, что .GetDate () является членом, но мне просто нужно знать, как получить клиент-боковой экземпляр объекта, который содержит этот член.

Ответы [ 3 ]

4 голосов
/ 18 октября 2011

Необходимо указать свойство ClientInstanceName (для веб-форм ASP.NET) и свойство «Имя» (для ASP.NET MVC), чтобы включить программный объект на стороне клиента для элемента управления:

<dx:ASPxDateEdit ... ClientInstanceName="de">
</dx:ASPxDateEdit>

var date = de.GetDate();
1 голос
/ 02 сентября 2014

Если вы разрабатываете пользовательский элемент управления на основе нескольких элементов управления DevExpress, которые должны иметь возможность взаимодействовать друг с другом, и у вас будет более одного экземпляра пользовательского элемента управления на данной странице, тогда лучше всего использовать DevExpress 'window.aspxGetControlCollection () с ClientID элемента управления DevExpress следующим образом:

window.aspxGetControlCollection().elements[clientID];

Недостатком этого является то, что вам, как правило, приходится создавать обработчики событий на стороне клиента в коде, где у вас есть простой доступ к клиентским идентификаторам элемента управления DevExpress, например, так.

ASPxGridView.ClientSideEvents.EndCallback = "function(s,e) { window.aspxGetControlCollection().elements['" + SomeOtherDevExpressControl.ClientID + "'].PerformCallback('callbackArg'); }";

Либо это, либо создайте объект JS для обработки ваших действий на стороне клиента и переопределите метод рендеринга, чтобы добавить некоторый скрипт для создания этого экземпляра с необходимыми идентификаторами клиента.

JS Экземпляр:

window.ClientControl = function(SomeOtherDevExpressControlClientId)
{
    this.SomeOtherDevExpressControlClientId = SomeOtherDevExpressControlClientId;
    this.SomeOtherDevExpressControl() = function(){ return window.aspxGetControlCollection().elements[this.SomeOtherDevExpressControlClientId]; }
    this.GridEndCallback = function(s,e) { this.SomeOtherDevExpressControl().PerformCallback('callbackArg'); }
}

Переопределение рендера:

proteced override void Render(HtmlTextWriter writer)
{
    base.Render(writer);
    writer.WriteLine();
    writer.WriteBeginTag("script");
    writer.WriteAttribute("type", "text/javascript");
    writer.Write(">");
    writer.WriteLine("window['" + UserControl.ClientInstanceName+ "'] = new ClientControl('" + SomeOtherDevExpressControl.ClientID + "');");
    writer.WriteEndTag("script");

}

Со вторым методом есть предположение, что вы добавили атрибут публичной строки ClientInstanceName в свой пользовательский элемент управления и задали это значение в разметке.

0 голосов
/ 18 октября 2011

Попробуйте:

var d = $("#<%=dpEndDate %>").GetDate();

Причина заключается в том, что ASP.NET ClientID идентифицируются по своему контейнеру именования в дереве элемента управления, поэтому может выглядеть как «ctl1_ct12_ct12_dpEndDate».

Вы можете заставить ASP.NET 4.0 не использовать это иерархическое именование, но оно включено по умолчанию.

...