2

我的代码有问题。下面是一个简单的例子,没有很多不必要的 html 标签。只有重要的事情,才能显示问题。

当我进入页面时,我得到这个错误:

创建用户控件时出错 (usercontrols/own/profilEdit.ascx)
c:\inetpub\wwwroot\umbraco\usercontrols\own\profilEdit.ascx(705):错误 CS0103:当前上下文中不存在名称“satbCountry”


此错误与<script>代码有关(无论如何此 js 代码是正确的,在另一个子页面上可以完美运行,但是当此代码在页面上时,它会崩溃)。为什么我会收到此消息?



这里代码:

                <asp:View ID="vSpecialist" runat="server">

                    <asp:UpdatePanel ID="UpdatePanel3" runat="server">
                        <ContentTemplate>

                         (..)    

        <asp:ListView runat="server" ID="lvAddressess" ItemPlaceholderID="phAddress" OnItemDataBound="lvAddressess_ItemDataBound">
   <LayoutTemplate> 
<asp:PlaceHolder ID="phAddress" runat="server"></asp:PlaceHolder>

  </LayoutTemplate>
                <ItemTemplate>
              <script>
              var input = document.getElementById('<%=satbCountry.ClientID %>');
              var options = {
                  types: ['(regions)']
              };
              var autocomplete = new google.maps.places.Autocomplete(input, options);

              </script>
              <asp:TextBox CssClass="textbox"  type="text" runat="server" ID="satbCountry"></asp:TextBox>

                            </ItemTemplate>
                        </asp:ListView>


                    </ContentTemplate>
        </asp:UpdatePanel>

            </asp:View>
4

1 回答 1

3

我认为这是因为satbCountry在模板中定义(即可以重复多次)。要获得clientID此控件,您需要使用服务器端代码定位每个实例(例如,使用FindControl("satbCountry")然后获取客户端 ID。

简而言之,您需要删除document.getElementById('<%=satbCountry.ClientID %>');以加载页面,然后替换为

document.getElementById('<%# Container.FindControl("satbCountry").ClientID %>');
于 2012-11-18T14:59:29.153 回答