ASP.NET下拉列表回调在div中不起作用

时间:2010-05-25 13:36:37

标签: asp.net vb.net html

这对我来说似乎非常奇怪。我在VB中完成了一个回调处理程序,它可以正常使用这段代码:

<!-- Div Outside Form -->
<div class="container">
<form id="querydata" runat="server">
<asp:DropDownList runat="server" ID="myddl" AutoPostBack="true" OnSelectedIndexChanged="myddlhandler">
<asp:ListItem>Hello</asp:ListItem>
<asp:ListItem>Goodbye</asp:ListItem>
</asp:DropDownList>
<asp:Label runat="server" ID="label1"></asp:Label>
</form>
</div>
<!-- Yep, they're matching -->

我可以更改值,一切都是A-OK,但如果我将代码更改为此(div in form):

<form id="querydata" runat="server">
<!-- Div inside form doesn't work :( --> 
<div class="container">
<asp:DropDownList runat="server" ID="myddl" AutoPostBack="true" OnSelectedIndexChanged="myddlhandler">
<asp:ListItem>Hello</asp:ListItem>
<asp:ListItem>Goodbye</asp:ListItem>
</asp:DropDownList>
<asp:Label runat="server" ID="label1"></asp:Label>
</div>
</form>

回发不再有效。 asp应该如何工作?还是一些只对我有用的神奇错误?最重要的是,如果asp不应该以这种方式工作,我应该怎么做呢?

谢谢!

3 个答案:

答案 0 :(得分:0)

事实证明我错了 - 这不是给我带来问题的div,而是其他非ASP表单元素。

为:

<div>
    <form runat="server">
       <asp:DropDownList runat="server" autopostback="true" onselectedindexchanged="myhandlername">
         <asp:ListItem>One</asp:ListItem>
         <asp:ListItem>Two</asp:ListItem>
      </asp:DropDownList>
      <div>
         <input type="text" id="mytext" />
      </div>
    </form>
</div>

好:

<div>
    <form runat="server">
       <asp:DropDownList runat="server" autopostback="true" onselectedindexchanged="myhandlername">
         <asp:ListItem>One</asp:ListItem>
         <asp:ListItem>Two</asp:ListItem>
      </asp:DropDownList>
      <div>
         <asp:TextBox runat="server" ID="mytext></asp:TextBox>
      </div>
    </form>
</div>

因此,与autopostback一起使用时,ASP表单组件显然与普通的HTML表单组件不兼容。

答案 1 :(得分:0)

当混合元素类型时,在更改下拉选项时,表单仍应回发,但html元素中的值将不会被保留,因为它们未被视图状态“覆盖”。

答案 2 :(得分:0)

我不知道它是否有任何区别,但我注意到你没有在你的答案中关闭<form>标签(如果你还想要答案的话,这应该是你的问题的编辑) 。此外,“ASP表单组件”被渲染为“普通的HTML表单组件”(带有一些JavaScript等),因此没有理由他们应该“不兼容”。