0

複数のテキスト ボックスを含む Web ユーザー コントロールがあります。これらのテキスト ボックスの一部には、javascript クリック イベントがあります。

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="myControl.ascx.vb" Inherits="myControl" ClassName="myControl" %>

<script type="text/javascript">

    function textbox1_Click(textbox1, textbox2, textbox3, textbox4) {
        //processing
    }

    function textbox2_Click(textbox1, textbox2, textbox3, textbox4) {
        //processing
    }

    function textbox3_Click(textbox1, textbox2, textbox3, textbox4) {
        //processing
    }

    function textbox4_Click(textbox1, textbox2, textbox3, textbox4) {
        //processing
    }

</script>

<div>
    <asp:TextBox ID="textbox1" runat="server"></asp:TextBox>
    <asp:TextBox ID="textbox2" runat="server"></asp:TextBox>
    <asp:TextBox ID="textbox3" runat="server"></asp:TextBox>
    <asp:TextBox ID="textbox4" runat="server"></asp:TextBox>
</div>

コード ビハインドでは、このようにクリック イベントを追加します。

Partial Class myControl
    Inherits System.Web.UI.UserControl

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        textbox1.Attributes.Add("onClick", "textbox1_Click(" & textbox1.ClientID & ", " & textbox2.ClientID & ", " & textbox3.ClientID & ", " & textbox4.clientID & ");")
        textbox2.Attributes.Add("onClick", "textbox2_Click(" & textbox1.ClientID & ", " & textbox2.ClientID & ", " & textbox3.ClientID & ", " & textbox4.clientID & ");")
        textbox3.Attributes.Add("onClick", "textbox3_Click(" & textbox1.ClientID & ", " & textbox2.ClientID & ", " & textbox3.ClientID & ", " & textbox4.clientID & ");")
        textbox4.Attributes.Add("onClick", "textbox4_Click(" & textbox1.ClientID & ", " & textbox2.ClientID & ", " & textbox3.ClientID & ", " & textbox4.clientID & ");")
    End Sub
End Class

現在、プレースホルダーを介してこれらのコントロールが大量に追加されているページがあります。

For x as Integer = 0 to 300
    Dim newRow As myControl = LoadControl("myControl.ascx") 
    myPlaceHolder.Controls.Add(newRow)
Next

問題は、このページの IE でのレンダリングが非常に遅いことです。IE9 では、ページのレンダリングに約 10 秒かかります。ユーザー コントロールがページ上で徐々にレンダリングされ、レンダリングが完了するまで IE はほとんど応答しません。IE8 を試してみましたが、さらに遅くなりました。もちろん、Firefox と Chrome はすぐにロードされます。

このパフォーマンスの問題は、clientID を JavaScript 関数に渡すことに直接関係していることがわかりました。クリック イベントへのすべての変数の受け渡しを削除すると、IE で正常に読み込まれます。

Public Class myControl
    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        textbox1.Attributes.Add("onClick", "textbox1_Click();")
        textbox2.Attributes.Add("onClick", "textbox2_Click();")
        textbox3.Attributes.Add("onClick", "textbox3_Click();")
        textbox4.Attributes.Add("onClick", "textbox4_Click();")
    End Sub
End Class

私はjavascript関数自体でclientIDを取得しようとしました。

var mytextbox = document.getElementById('<%= textbox1.ClientID %>');

これは機能しません。最後に動的に追加されたユーザー コントロールの ID が常に返されます。

これを妥当な時間内に IE でレンダリングできる方法はありますか? たぶん、私がやっていることを達成する別の方法がありますか? 助けてくれてありがとう!

4

0 に答える 0