ASP.NET (.NET Framework) <form> 标签中的 asp 按钮不调用 OnClick 函数

问题描述 投票:0回答:2

我的 Default.aspx 中有两个表单

<div class="form">
    <form id="WordFilterForm" >
        <label for="inputString">Enter a string:</label>
        <input type="text" id="inputString" name="inputString" required="required" />
        <br />
        <asp:Button ID="WordFilterButton" runat="server" Text="Filter" OnClick="WordFilterButton_Click" />

    </form>
</div>

<div class="WordCountContainer">
    <form id="WordCountForm">
         <label for="inputText">Enter a large string:</label>
         <textarea id="inputText" name="inputText" rows="10" cols="50" required="required"></textarea>
         <br />
        <asp:Button ID="WordCountButton" runat="server" Text="Count" OnClick="WordCountButton_Click" />
            </form>
<div>

WordFilterButton_Click 和 WordCountButton_Click 均在 Default.aspx.cs 中使用受保护的签名进行定义。

问题是,每当在第二个表单(表单 id="WordCountForm")中单击“计数”按钮时,没有任何反应,并且 WordCountButton_Click 不会根据调试器执行。

但是,如果我将其放在第一种形式中,相同的按钮就可以工作。

知道为什么第二个表单按钮不会执行 OnClick 函数吗?

c# html asp.net webforms .net-4.8
2个回答
1
投票

ASP.NET 页面只能有一个带有 (runat="server") 属性的表单标签来使事件处理程序工作。因此,有必要将上述属性添加到第一个表单,将所有服务器端控件移至其上,然后删除第二个表单,以便在 ASP.NET WebForms 应用程序中正确实现表单/回发。


1
投票

您缺少这两种表单的

runat="server"
标签。

事实上,如果您不添加该标签,您应该会收到如下错误:

enter image description here

根本不清楚为什么您没有收到上述错误。

而且,由于您无法嵌套表单标签,因此每页只能有一个。

既然每页实际上只能有一个

<form>
标签,那么为什么要有两个呢? (反正是不允许的)。

我不明白为什么仅仅一个简单的 div 来布局或分隔你想要的部分在这里是不够的。

也许您将

<form>
标签与 formview 标签混淆了?

放弃对表单标签的多次使用,只需始终使用 VS 为您创建的默认表单标签,并将您的内容放置在该表单标签内即可。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.