避免使用 AJAX Page_Load影响我的数组
本文关键字:Load 影响 我的 数组 Page AJAX | 更新日期: 2023-09-27 18:31:49
我有一个文本框,用户认为在上面放置数字,在他按下按钮后,数字应该传递给一个数组。
并且按下的每个数字和按钮都应按顺序保存在此数组中(例如:3,4,5,...)。
问题是,每次我按下按钮时,都会发生page_load
。我有这个代码:
protected string[] CurrentArr;
protected void Page_Load(object sender, EventArgs e)
{
if (CurrentArr != null)
{
CurrentArr = (string[])Session["CurrentArr"];
}
else
CurrentArr = new string[length];
哪个CurrentArr
是随时间变化的数组。
我也尝试用 AJAX 解决它:
<asp:ScriptManager runat="server" ID="sm">
</asp:ScriptManager>
<asp:UpdatePanel runat="server" ID="update">
<ContentTemplate>
<input type="text" class="response" id="how_many" name="guess" placeholder="Enter your guess..." />
<asp:Button runat="server" class="button red" id="generate" name="generate" value="Generate!" OnClick="guess_Click" />
<asp:Button runat="server" class="button red" id="win" name="win" value="you won" />
</ContentTemplate>
</asp:UpdatePanel>
但它对我的数组没有影响(尽管我的页面没有回发......
有人有解决方案吗?
谢谢!
您使用的是 UpdatePanel,它本质上是 AJAXized 的。只需添加一个触发器部分即可捕获按钮点击:
<asp:UpdatePanel runat="server" ID="update">
<ContentTemplate>
<input type="text" class="response" id="how_many" name="guess" placeholder="Enter your guess..." />
<asp:Button runat="server" class="button red" id="generate" name="generate" value="Generate!" OnClick="guess_Click" />
<asp:Button runat="server" class="button red" id="win" name="win" value="you won" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="generate" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
您可能会遇到的问题是您的数组没有通过回发持久化。试试你和 ed 从会话中得到什么、获取和设置什么。我不喜欢使用老式数组。考虑一个列表,它们更通用。如果你特别需要在最后有一个数组,那么只需使用 myList.ToArray();
private List<int> CurrentArr = new List<string>();
protected void Page_Load(object sender, EventArgs e)
{
if(Session["CurrentArr"] != null)
{
//if there is something stored in the session variable then grab that as a working array
CurrentArr = (List<string>)Session["CurrentArr"];
}
else
{
//if not, then initialize one
CurrentArr = new List<string>();
Session["CurrentArr"] = CurrentArr;
}
}
protected void guess_Click(object sender, EventArgs e)
{
//get reference to the button clicked like you said in your question
var btnMyButton = sender as Button;
btnMyButton.Enabled = false; //example of using the reference, disable the button that was clicked
//add the value of your text box to the array/list, sort, then update the session
this.CurrentArr.Add(txtYourTextBox.Text);
this.CurrentArr.Sort();
Session["CurrentArr"] = this.CurrentArr;
}
当然,Load
是ASP的一部分。网络的页面生命周期。
请参阅 Page.IsPostBack 以更好地控制您想要或不想运行的方法,具体取决于请求类型(是否是回发)。
在上面的代码中,这可能是你的意思:
if (Session["CurrentArr"] != null)
{
CurrentArr = (string[])Session["CurrentArr"];
}
else
{
CurrentArr = new string[length]; //where is length defined?
Session["CurrentArr"] = CurrentArr;
}