暂停循环,直到单击模式按钮
本文关键字:单击 模式 按钮 循环 暂停 | 更新日期: 2023-09-27 18:31:35
我需要在循环期间手动输入一些值。我正在使用 C# ASP.Net 和 WebForms。
我正在尝试这个:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace systemII
{
public partial class MY_System : System.Web.UI.Page
{
private List<String> List = new List<string>();
private bool loop = false;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
while (loop) { }
for (int i = 1; i <= 10; i++)
{
string a = "A" + i.ToString();
if (i == 4 || i == 5)
{
loop = true;
ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "openModal();", true);
}
else
{
List.Add(a);
}
}
}
protected void Button2_Click(object sender, EventArgs e) // modal button
{
string b = "BB";
Lista.Add(b);
loop = false;
return;
}
}
}
但是模态在循环结束后出现在屏幕上。我需要暂停循环,直到输入文本框值。
有人可以帮助我吗?对不起,我的英语不好。
ASP.Net 您不能只是暂停服务器端代码,因为即使您在 ASP.Net 中使用异步页面,服务器端代码也始终完全(从不部分)执行,而且,服务器端never
连接到浏览器,而是在单独的进程中执行。浏览器永远不知道也不关心服务器端发生了什么,服务器端不知道也不关心浏览器在做什么,so it's impossible
以您想要的方式将服务器端代码连接到浏览器。
但是,您可以通过在达到第一个索引 =4 并发出模态弹出脚本时中断循环来模拟所需的内容。然后,当用户输入了 i=4 的值并且页面已回发时,您可以对 i= 5 执行类似的操作。但是,成功处理输入i
的值将需要跨来自浏览器的请求进行跟踪,这是在下面的代码中通过设置一个名为 HandledValues
的ViewState
变量来完成的,该变量只是字符串类型的 List 的集合。
因此,如果您使用此代码,则工作流将是:系统将提示用户在模式弹出窗口中输入 i=4 的值,然后当单击按钮Button1
并回发页面时,将提示用户在模式弹出窗口中输入 i = 5 的值。
protected void Button1_Click(object sender, EventArgs e)
{
//a list of values handled is stored in ViewState as ValuesHandled
List<string> handledValues = new List<string>();
if (ViewState["ValuesHandled"] != null) {
List<string> handledValues = (ViewState["ValuesHandled"] as List<string>;
}
for (int i = 1; i <= 10; i++)
{
string a = "A" + i.ToString();
//check if i = 4 has had its values input successfully
if (i == 4 && !handledValues.Contains(i.ToString()))
{
loop = true;
ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "openModal();", true);
handledValues.Add(i.toString());
//break the loop since we need to return to browser for input by user
break;
}
else if (i == 4 && handledValues.Contains(i.ToString()))
{
//remove handled value if no modal popup needed to be opened
handledValues.Remove(i.ToString())
}
else if (i == 5 && !handledValues.Contains(i.ToString()))
{//check if i = 5 has had its values input successfully
loop = true;
handledValues.Add(i.toString());
ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "openModal();", true);
//break the loop since we need to return to browser for input by user
break;
}
else if (i == 5 && handledValues.Contains(i.ToString()))
{
//remove handled value if no modal popup needed to be opened
handledValues.Remove(i.ToString())
}
else
{
List.Add(a);
}
}
//update the ViewState for ValuesHandled
ViewState["ValuesHandled"] = handledValues;
}