1

同じ Web ユーザー コントロール (単純な WYSIWYG エディター) の 2 つのインスタンスを含む ASP.NET ページがあります。送信時に、WUC は JavaScript マジックを実行してから、通常のポストバックに進みます。

最初のインスタンスは機能しているように見えますが、2 番目のインスタンスはサーバーへの変更のポストバックに失敗します (元のインスタンスに戻り、それをポストします)。問題は、JS が最初の WUC に対してのみ起動することだと思います。生成されたクライアント側のソースから、次のコードまでたどりました。

function WebForm_OnSubmit() {
    prepHtml('AddEditPopup1_ctlEditorQuestion_txtEdit','AddEditPopup1_ctlEditorQuestion_divEdit', 'AddEditPopup1_ctlEditorQuestion_divHT' );        
    //snip...
}

問題は、WUC のインスタンス用とインスタンス用の2 つの呼び出しがあることです。prepHtmlctlEditorQuestionctlEditorAnswer

代わりに、 用のものしかありませんctlEditorQuestion。どちらのコントロールも OnSubmit イベントを登録していますが、一方が他方を上書きします。

呼び出しは、prepHtml実行時に WUC の C# コードから登録されます。

//Page_Load
_onSubmit = String.Format("prepHtml('{0}','{1}', '{2}' );", 
                txtEdit.ClientID, divEdit.ClientID, divHT.ClientID);

//OnPreRender
Page.ClientScript.RegisterOnSubmitStatement(this.GetType(), "get-html", _onSubmit);

私はこのコントロールを自分で書いたわけではなく、OnSubmit JS コードのこの種の実行時登録はこれまで見たことがありません。Page.ClientScript.RegisterOnSubmitStatementは私にとってまったく新しいものです。

両方のprepHtml呼び出しを登録して、順番に実行する必要があります。これは可能ですか?Page.ClientScript.RegisterOnSubmitStatement送信時にコードが起動される限り、私は の代替案を受け入れます。

4

1 に答える 1

1

これは、コントロールをページに密接に結合することなく、必要なことを行う必要があります。

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        string onSubmit = string.Format("prepHtml('{0}','{1}', '{2}';",
            txtEdit.ClientID,
            divEdit.ClientID,
            divHT.ClientID);

        Page.ClientScript.RegisterOnSubmitStatement(this.GetType(), 
            this.Id + "_getHtml", onSubmit);
    }
}

キーは(コメントで述べたように)一意の名前です。スクリプト名に「this.ID」を使用していることに注意してください。ID プロパティはページ内で一意であることが保証されているため、候補として適しています。

于 2011-02-10T01:03:20.220 に答える