我的代码有问题。下面是一个简单的示例,没有很多不必要的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>
最佳答案
我认为这是因为satbCountry
是在模板中定义的(即可以重复多次)。要获取此控件的clientID
,您将需要使用服务器端代码(例如,使用FindControl("satbCountry")
)定位每个实例,然后获取客户端ID。
简而言之,您需要删除document.getElementById('<%=satbCountry.ClientID %>');
以便加载页面,然后替换为
document.getElementById('<%# Container.FindControl("satbCountry").ClientID %>');
关于c# - 在当前上下文中不存在文本框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13441270/