1

我有一个 ComponentArt 回调控件。客户端,我想在下拉列表更改时使用 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 提供组件艺术论坛链接。这为我指明了我需要去的方向。

4

1 回答 1

0

对这个问题的快速回答:不能完全按照问题的措辞来完成。

更详细地说:

假设是,javascript 函数在回调中显式传递发送者和事件参数。不是这种情况。相反,javascript 函数正在传递一些绑定到事件参数中的参数。

发送者(在本例中为下拉列表控件)和 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.
}
于 2010-11-25T21:01:46.013 回答