Как вы явно передаете ComponentArt CallBackEventArgs из функции JavaScript при обратном вызове? - PullRequest
0 голосов
/ 25 ноября 2010

У меня есть элемент управления ComponentArt CallBack.На стороне клиента, я хочу выполнить обратный вызов с использованием JavaScript, когда раскрывающийся список изменяется.В javascript я хочу явно передать как элемент управления, так и связанный с ним ComponentArt.Web.UI.CallBackEventArgs.

Ниже приведена простая реализация того, что я пытаюсь выполнить в более широком масштабе.

Что я добавлю в javascript для явной передачи ComponentArt.Web.UI.CallBackEventArg? Предполагая, что это возможно, интересующая меня часть помечена WHAT_DO_I_PUT_HERE.

Элемент управления ascx содержит:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="foo.ascx.cs" Inherits="WebPlugins.foo" %>
<%@ Register TagPrefix="ComponentArt" Namespace="ComponentArt.Web.UI" Assembly="ComponentArt.Web.UI" %>

<script language="javascript" type="text/javascript">
    function changeDDL(sender) {
        alert("This alert pops up. No problems here.");
        fooClbk.Callback(sender, WHAT_DO_I_PUT_HERE );
    }
</script>

<ComponentArt:CallBack id="fooClbk" runat="server" OnCallback="fooClbk_Callback">
    <Content>
        <asp:Label ID="lblmyDDL" AssociatedControlID="myDDL" runat="server" Text="Choose an option: "></asp:Label>
        <br />
        <asp:DropDownList ID="myDDL" runat="server">
            <asp:ListItem Value="DEFAULT" Text="The Default Value"></asp:ListItem>
            <asp:ListItem Value="ONE" Text="First!"></asp:ListItem>
            <asp:ListItem Value="TWO" Text="Runner up"></asp:ListItem>
        </asp:DropDownList>
    </Content>
    <LoadingPanelClientTemplate>
        <p>Refreshing Rate Information...</p>
    </LoadingPanelClientTemplate>
</ComponentArt:CallBack>

Кодовый код ascx.cs содержит:

//Some includes...

namespace WebPlugins
{
    public partial class foo : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            initializeDDLEvt();
            //Initialize some other stuff...
        }

        private void initializeDDLEvt()
        {
            /* Register client events for DDL */
            myDDL.Attributes.Add("onChange", "changeDDL(this);");
        }

        protected void fooClbk_Callback(object sender, ComponentArt.Web.UI.CallBackEventArgs e)
        {
            //Render some new HTML using the ComponentArt.Web.UI.CallBackEventArgs
        }
    }
}

РЕДАКТИРОВАТЬ: мое основное понимание того, что здесь происходит, было неправильно.Я предоставил некоторые детали, где я ошибся в комментарии ниже.Спасибо @jalpesh за ссылку на форум componentart.Это указало мне направление, в котором я должен был идти.

1 Ответ

0 голосов
/ 26 ноября 2010

Быстрый ответ на этот вопрос: это невозможно сделать точно так, как сформулирован вопрос.

Более подробно:

Предполагается, что функция javascript явно передает отправителю иаргументы события при обратном вызове.Это не вариант.Вместо этого функция javascript передает некоторые параметры, которые связаны в аргументы события.

Отправитель (в данном случае элемент управления dropdownlist) и CallBackEventArgs неявно передаются методу fooClbk_Callback.Я думаю, что это отчасти неправильное понимание разницы между функциями и методами .

По сути, это:

function changeDDL(sender) {
    alert("This alert pops up. No problems here.");
    fooClbk.Callback(sender, WHAT_DO_I_PUT_HERE );
}

должно быть примерно таким:

function changeDDL(aControl) {
    alert("This alert pops up. No problems here.");
    fooClbk.Callback(aControl.options[aControl.selectedIndex].value); // Or whatever other params
}

Доступ к параметрам, переданным из функции javascript, можно получить с помощью метода обратного вызова, например:

protected void fooClbk_Callback(object sender, ComponentArt.Web.UI.CallBackEventArgs e)
{
    //Do Some stuff
    string myVal = e.Parameters[0];
    // Do something with the chosen myVal.
}
...