我在我的ASP.NET页面中有一个HTML select
控件,我将其设置为runat = "server"
,现在我试图动态地向其添加一些列表项。
var list = document.getElementById('<%=list1.ClientID%>');
var newListItem = document.createElement('OPTION');
newListItem.text = "Emp1";
newListItem.value = "e101";
list.add(newListItem);
<asp:Panel ID="pnlemp" runat="server"
Style="display: none;"
CssClass="modalPopup"
width="700px" Height="350px">
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<select id="list1" multiple="true" name="list1" runat="server">
</select>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
现在当我试图从我的代码中访问它时,如list1.Items.Count
,它显示为0
。
有什么不对吗?
2条答案
按热度按时间kmpatx3s1#
当你在客户端脚本中修改html时,视图状态(跟踪所有控件)不会更新,这会导致当你回发时,新的项不在“那里”。
有时会有一个__doPostBack()javascript强制回发,但我不确定它是否有效。
ca1c2owp2#
为了解决这个问题要么通过服务器端代码动态添加项目要么不要把服务器端带入画面并通过javascript处理所有事情。
通过javascript添加的项目将不会被ASP.NET持久化。此外,您可能会收到一个“Invalid Callback or PostBack Argument”异常,因为它不会理解这些列表项(选项)是从哪里添加到Select中的。