暂停循环直到单击模态按钮
Pause Loop until click modal button
我需要在循环中手动输入一些值。我正在使用 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 中,您不能只暂停 server-side 代码,因为即使您在 ASP.Net 中使用异步页面,server-side 代码始终会完全执行(绝不会部分执行)而且,server-side never
已连接到浏览器,但在单独的进程中执行。浏览器永远不知道也不关心 server-side 上发生了什么,server-side 不知道也不关心浏览器在做什么,so it's impossible
将 server-side 代码连接到随心所欲地浏览。
但是,您可以通过在达到第一个索引 =4 并发出模态弹出脚本时中断循环来模拟您想要的。 然后您可以为i= 5 当用户输入 i=4 的值并且页面已回发时。但是,成功处理输入的 i
的值将需要跨浏览器的请求进行跟踪,这在下面的代码中通过设置一个名为 HandledValues
的 ViewState
变量来完成,这只是字符串类型列表的集合。
因此,如果您使用此代码,工作流程将是:系统将提示用户在模式弹出窗口中输入 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;
}
我需要在循环中手动输入一些值。我正在使用 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 中,您不能只暂停 server-side 代码,因为即使您在 ASP.Net 中使用异步页面,server-side 代码始终会完全执行(绝不会部分执行)而且,server-side never
已连接到浏览器,但在单独的进程中执行。浏览器永远不知道也不关心 server-side 上发生了什么,server-side 不知道也不关心浏览器在做什么,so it's impossible
将 server-side 代码连接到随心所欲地浏览。
但是,您可以通过在达到第一个索引 =4 并发出模态弹出脚本时中断循环来模拟您想要的。 然后您可以为i= 5 当用户输入 i=4 的值并且页面已回发时。但是,成功处理输入的 i
的值将需要跨浏览器的请求进行跟踪,这在下面的代码中通过设置一个名为 HandledValues
的 ViewState
变量来完成,这只是字符串类型列表的集合。
因此,如果您使用此代码,工作流程将是:系统将提示用户在模式弹出窗口中输入 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;
}