我使用 Firestore 作为数据库来收集数据并通过中继器呈现数据,以使用 C# 在我的 Kesitler.aspx 页面上创建卡片。我的主要问题是,当我单击 asp:Button 元素时,它会刷新页面,这是我不希望发生的情况。虽然它看起来很基本,但我还没有找到简单的解决方案。我不喜欢使用 JavaScript onClick 功能,因为单击会影响数据库操作,我想在单击事件后设置数据,而不在 JavaScript 脚本中初始化数据库。这个问题有解决办法吗?
Kesitler.aspx 中的代码:
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
以及 Kesitler.aspx.cs 中的代码:
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("Resss");
}
我尝试使用 Response.Redirect(Kesitler.aspx) 但这对我不起作用。
这里的解释有点混乱。
如果您的网络表单中有一个按钮,并且单击它,则该网页将被发布回服务器。这样做的原因是,后面的代码可以通过服务器端代码使用、查看和修改网页上的控件。如果您不回发,则该网页仍位于用户桌面上,因此您将无法更改或修改该页面上的控件。
所以,这里有几种方法。
调用 Web 方法,并从页面上的几个控件传递值。如果需要将结果显示在页面上,那么 Web 方法将必须返回此类值,然后您的客户端 JavaScript 将更新页面上的控件。
另一种可能是采用我们所说的“部分”页面回发。在大多数情况下,这意味着客户端变量将保持不变,并且您不会遭受整页回发。
因此,您可以使用所谓的更新面板。这实际上将自动为您自动生成页面的“ajax”部分,并且无需编写 JavaScript 即可实现此功能。
因此,包括按钮,以及背后的代码的任何其他控件都需要在更新面板内部进行更新。
所以,设计模式看起来像这样:
首先,从工具箱中拖动脚本管理器 - 将其放置在标记中具有“form”标签的右侧。
然后拖入更新面板。
那么,你就有了这个:
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
现在,稍后在您的标记中,您可以执行以下操作:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<h3>Place all markup and controls and buttons</h3>
<h3>Inside of this area to ajax</h3>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button"
OnClick="Button1_Click1"
/>
</ContentTemplate>
</asp:UpdatePanel>
因此,在上面的更新面板内,将所有标记放置在内容模板内。
现在,当您单击该按钮时,只有页面的该部分将被发送回服务器。 (您甚至看不到浏览器微调器,从各个角度来看,该页面似乎都没有被回传。
请记住,页面生命周期确实会触发,并且像所有页面一样,页面加载事件将首先触发(像往常一样),然后按钮代码存根将运行。
所以,尝试一下上面的想法。它应该保留现有客户端 JavaScript 值的值。因此,仅将您想要“ajax”的内容和控件放置在该页面上。因此,您可以单击标准按钮并运行代码,但您的客户端 JavaScript 值将保持不变,并且不会被重新设置。