1

ComponentArt CallBack コントロールがあります。クライアント側で、ドロップダウンリストが変更されたときにjavascriptを使ってコールバックを行いたいです。JavaScript では、コントロールと関連する ComponentArt.Web.UI.CallBackEventArgs の両方を明示的に渡したいと考えています。

以下は、私が大規模に達成しようとしていることの必要最小限の実装です。

ComponentArt.Web.UI.CallBackEventArg を明示的に渡すには、JavaScript に何を入力すればよいですか? これが可能であると仮定すると、私が興味を持っている部分は 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
        }
    }
}

編集: ここで何が起こっているかについての私の基本的な理解は間違っていました。以下のコメントで、どこが間違っていたのかを詳しく説明しました。componentart フォーラムのリンクを提供してくれた @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 に答える