暂停循环,直到单击模式按钮

本文关键字:单击 模式 按钮 循环 暂停 | 更新日期: 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的值将需要跨来自浏览器的请求进行跟踪,这是在下面的代码中通过设置一个名为 HandledValuesViewState变量来完成的,该变量只是字符串类型的 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;
}