JavaScript方法无法在ASP.NET用户控件中使用

时间:2012-01-12 19:38:05

标签: c# javascript asp.net user-controls updatepanel

之前我问了一个关于JavaScript代码的问题,你可以在这里看到它:How can I scroll down to a multiline TextBox's bottom line, Javascript's scrollIntoView is not working for this。好吧,它已经解决了,并且接受的答案正在起作用。

之后我不得不将您在该问题中看到的代码部分移动到最终看起来像这样的用户控件:

 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LiveChatPart.ascx.cs" Inherits="BeyzamComArayuz.LiveChatUserControl.LiveChatPart" %>
 <%@ Register src="/LiveChatUserControl/GenelOdaFlashPart.ascx" tagname="GenelOdaFlash" tagprefix="gOF" %>
 <script language="javascript" type="text/javascript">
 function buttonClicked() {
    //            var el = document.getElementById("TxtBxOdaMesajlari");
    var textBox = $get("TxtBxOdaMesajlari");
    textBox.scrollTop = textBox.scrollHeight;
    //            $get("TxtBxOdaMesajlari").scrollIntoView("false");
}
</script>
<asp:ScriptManager ID="ScrptMngr" runat="server"></asp:ScriptManager>
<tr>  
                          <gOF:GenelOdaFlash runat="server"></gOF:GenelOdaFlash>
                            <td valign="top" align="left">
                                <table>


                                </table>
                            </td>
                            <td valign="top" align="left">
                                <table>
                                    <tr>
                                        <td>
                                            buraya imajlar gelecek - chip vs.
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <asp:ListBox ID="LstBxOdadakiKullanicilar" runat="server"
                                             Width="175" Height="281" Enabled="false">
                                                <asp:ListItem Value="1" Text="Bir"></asp:ListItem>
                                            </asp:ListBox>
                                        </td>
                                    </tr>
                                    <tr>

                                        <td>
                                            <asp:UpdatePanel ID="UpdtPnlButtonlar" runat="server">
                                                <ContentTemplate>
                                                    <table>
                                                        <tr>
                                                            <td>


                                                    <asp:Button ID="ButtonOdadanCik" runat="server" Text="Odadan Çık" Width="175" Height="22" />
                                                    <asp:Button ID="ButtonHediyeGonder" runat="server" Text="Hediye Gönder" Width="175"
                                                        Height="22" />
                                                    <asp:Button ID="ButtonFullEkran" runat="server" Text="Full Ekran" Width="175" Height="22" />

                                                        <table>
                                                            <tr>
                                                                <td>
                                                                    <asp:Panel ID="PnlKontroller" runat="server" GroupingText="Kontroller" 
                                                                    Visible="false">
                                                                        <table>
                                                                            <tr>
                                                                                <td>
                                                                                    <asp:Label ID="LblChatTuru" runat="server" Text="Ücretsiz!"></asp:Label>
                                                                                </td>
                                                                            </tr>
                                                                            <tr>
                                                                                <td>
                                                                                    <asp:Button ID="BttnSohbetTuruDegistir" runat="server" 
                                                                                    Width="175" Text="Sohbet Türü Değiştir"
                                                                                     OnClick="BttnSohbetTuruDegistir_click" />

                                                                                    <asp:Button ID="BttnMolaVer" runat="server" 
                                                                                    Width="175" Text="Mola Ver" OnClick="BttnMolaVer_click" />
                                                                                </td>
                                                                            </tr>
                                                                        </table>

                                                        </asp:Panel>
                                                                </td>
                                                            </tr>
                                                        </table>


                                                    </td>

                                                        </tr>

                                                    </table>
                                                </ContentTemplate>
                                            </asp:UpdatePanel>

                                                <asp:Button ID="ButtonOzelSohbet" runat="server" Text="Özel Sohbet" Height="108"
                                                        Width="175" OnClick="ButtonOzelSohbet_click" />
                                                    <asp:Panel ID="PnlOzelSohbetKamera" runat="server" Visible="false">                                                           
                                                <asp:Label ID="asd" runat="server" Text="zsa"></asp:Label>
                                                    <div id="ozelOdaKamera" style="height: auto; float: left;">
                                                <script type="text/javascript" src="/jwplayer/swfobject.js"></script>
                                                <script type="text/javascript">
                                                    //            For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. 
                                                    var swfVersionStr = "11.1.0";
                                                    //            <!-- To use express install, set to playerProductInstall.swf, otherwise the empty string. -->
                                                    var xiSwfUrlStr = "playerProductInstall.swf";
                                                    var flashvars = {};
                                                    var params = {};
                                                    params.quality = "high";
                                                    params.bgcolor = "#FFFFFF";
                                                    params.allowscriptaccess = "sameDomain";
                                                    params.allowfullscreen = "true";
                                                    var attributes = {};
                                                    attributes.id = "uyeOzelOdaKameraFlash";
                                                    attributes.name = "uyeOzelOdaKameraFlash";
                                                    attributes.align = "middle";
                                                    swfobject.embedSWF(
                                                                        "/Images/uyeOzelOdaKameraFlash.swf", "ozelOdaKamera",
                                                                        "220", "150",
                                                                        swfVersionStr, xiSwfUrlStr,
                                                                        flashvars, params, attributes);
                                                    //          <!-- JavaScript enabled so display the flashContent div in case it is not replaced with a swf object. -->
                                                    swfobject.createCSS("#flashContent", "display:block;text-align:left;");
                                                    </script>                                                    
                                            </div>
                                                    </asp:Panel>

                                        </td>

                                    </tr>
                                </table>
                            </td>
                        </tr>
                        <tr>
                                        <td style="padding-left:8px;">
                                            <asp:UpdatePanel ID="UpdtPnlMesajlar" runat="server" EnableViewState="true">
                                                <ContentTemplate>
                                                    <table>
                                                        <tr>
                                                            <td>
                                                                <table>


                                                        <tr>
                                                            <td>
                                                                <%--<div id="satir">--%>

                                                                <asp:TextBox ID="TxtBxOdaMesajlari" runat="server" 
                                                                ReadOnly="true" TextMode="MultiLine"
                                                                Height="100" Width="350">                                                                        
                                                                </asp:TextBox>
                                                                <%--</div>--%>
                                                            </td>
                                                        </tr>

                                                        <tr>
                                                            <td>
                                                                <asp:TextBox ID="TxtBxMesaj" runat="server" Width="285"></asp:TextBox>
                      <%--this is the button which should run the javascript function--%>
                                                                <asp:Button ID="BttnGonder" runat="server" Text="Gönder" 
                                                                Width="58" OnClick="BttnGonder_click"/>
                                                            </td>
                                                        </tr>  

                                                                     </table>    
                                                            </td>
                                                            <td valign="top">

                                                            <asp:Panel ID="PnlAktiviteKayitlari" runat="server" 
                                                            Visible="false" GroupingText="Aktivite Kayıtları">
                                                                <table>
                                                                    <tr>
                                                                        <td valign="top">
                                                                            <asp:ListBox ID="LstBxAktiviteKayitlari" runat="server"
                                                                            Enabled="false" Width="128">
                                                                    <asp:ListItem Value="1" Text="Bir giriş yaptı"></asp:ListItem>
                                                                    </asp:ListBox>
                                                                        </td>
                                                                    </tr>

                                                                </table>

                                                            </asp:Panel>

                                                            </td>
                                                        </tr>                                         
                                                    </table>
                                                </ContentTemplate>
                                            </asp:UpdatePanel>
                                        </td>
                                    </tr>

在asp.cs文件中我有

protected void BttnGonder_click(object sender, EventArgs e)
        {
            string cariId = "";
            if (KullaniciTuru == 1)
            {
                cariId = Session["ModelId"].ToString();

            }
            else
            {
                cariId = Session["UyeId"].ToString();
            }
            string uyeHesapAdi = BAL.Cari.Cari.GetCariHesapAdi(int.Parse(cariId));

            string mesaj = uyeHesapAdi + " : " + TxtBxMesaj.Text;
            TxtBxOdaMesajlari.Text = TxtBxOdaMesajlari.Text + Environment.NewLine + mesaj;
            //TxtBxOdaMesajlari.Focus();

            ScriptManager.RegisterStartupScript(this, this.GetType(), "txtbxmesajlarslide", "buttonClicked();", true);
            TxtBxMesaj.Text = string.Empty;
        }

我的问题是buttonClicked()功能不再起作用了,我尝试使用ScottS's answer中的Page.ClientScriptManager.RegisterClientScriptInclude以及Page.ClientScript.RegisterClientScriptBlock,这两个都没有用。我可以做什么办?

编辑:我尝试使用IE9的内置调试器调试网页,并在buttonClicked()函数中放置一个断点,但它从未被点击过。然后我使用了OnClientClick按钮的事件和添加的buttonClicked函数,它适用于每次单击,但文本框只是跳回到buttonClicked()函数之前的位置。

1 个答案:

答案 0 :(得分:3)

问题是用户控件上的控件的ID有些受损,因为它们包含用户控件的id加上实际控件的id。所以你的控件的id可能看起来像:ucLiveChatPart_TxtBxOdaMesajlari

处理此问题的简便方法是更改​​此行:

var textBox = $get("TxtBxOdaMesajlari");

为:

var textBox = document.getElementById('<%= TxtBxOdaMesajlari.ClientID %>');

现在,如果你将javascript解压缩到一个单独的文件中,或者你想使用不同的方法,你可以将控制id从代码隐藏发送到javascript变量中,然后使用它。

在codebehind中:

ScriptManager.RegisterStartupScript(this, this.GetType(), "TxtBxOdaMesajlariId", "var m_TxtBxOdaMesajlariId = '" + TxtBxOdaMesajlari.ClientID + "'";, true);

并在javascript中:

var textBox = $get(m_TxtBxOdaMesajlariId);