Jasonchne 2024-06-20 18:05 采纳率: 25%
浏览 3

参数传递需要手动刷新页面

我想在选择用户界面,将获取的用户姓名回传给上一个页面,具体代码如下:
选择页面btn_ok_Click按钮事件,获取选择用户的姓名

protected void btn_ok_Click(object sender, EventArgs e)
        {
            //string itemID = ItemIDs();
            //BLL.Staffs bll = new BLL.Staffs();
            //DataTable table = bll.GetStaffs(itemID);
            string str = "";
            string name = "";
            foreach (GridViewRow row in FolderView.Rows)
            {
                CheckBox checkBox = (CheckBox)row.FindControl("checkMail");
                if (checkBox != null && checkBox.Checked)
                {
                    str = str + FolderView.DataKeys[row.RowIndex].Value.ToString() + ",";
                }

            }
            if (str != "")
            {
                str = str.Substring(0, str.Length - 1);
            }
            BLL.Staffs bll = new BLL.Staffs();
            DataTable table = bll.GetStaffs(str);
            if (table.Rows.Count > 0)
            {
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    name = name + table.Rows[i]["StaffName"].ToString() + ',';
                }
            }
            if (name != "")
            {
                name = name.Substring(0, name.Length - 1);
            }
            txt_users.Text = name;
          
            Session["addUser"] = txt_users.Text;
           
           if (txt_users.Text != "" && Session["addUser"].ToString() != "")
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "goBackScript", "CloseWindow();", true);
            }
        }

获取用户姓名存在选择页面的txt_users中,点击按钮后通过JS实现关闭选择页面

function CloseWindow()
        {
            window.close(); // 关闭当前窗口或标签页
        return false; // 阻止按钮的默认提交行为(如果有的话)
        }

关闭选择页面后,母页面(DocAdd.aspx)不能加载出选择的用户姓名,需要手动刷新页面才能显示,母页面代码如下:

protected void Page_Load(object sender, EventArgs e)
        {

            UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
            Response.AddHeader("P3P", "CP=CAO PSA OUR");
            //检测用户是否登录
            if (!CheckUserLogin())
            {
                //Response.Redirect("../Login.aspx");
            }
            
            if (!Page.IsPostBack)
            {
                DirBinds();
            }
            //ItemIDs();
        }

母页面获取子页面传过来的用户姓名:

private void ItemIDs()
        {
            if (Session["addUser"] != null)
            {
                string name = Session["addUser"].ToString();
                txt_fileAdd.Text = name;
            }
        }

各位,帮忙看看这是什么问题!!

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-20 18:05
    关注

    引自免费微信小程序:皆我百晓生

    从你给出的代码和描述来看,问题似乎在于选择页面(子页面)将用户姓名存入Session后,母页面(DocAdd.aspx)并未立即更新显示这个姓名,而是需要手动刷新页面才能显示。这个问题可能是由于ASP.NET的页面生命周期以及Session的状态更新机制导致的。

    在ASP.NET中,每次页面请求都会创建一个新的页面实例,即使它是从一个已经存在的页面跳转过来的。因此,即使你在子页面中将数据存入Session,母页面在初次加载时并不会知道这个变化,除非进行刷新。这是因为Session状态是在服务器端的,而页面的加载是在客户端发起的请求时进行的。

    为了解决这个问题,你有几个选项可以尝试:

    1. 使用回调函数或AJAX请求更新母页面:你可以在子页面点击按钮后,通过AJAX发送一个请求到母页面,让母页面从Session中获取数据并进行更新,而不是直接关闭子页面。这样,母页面的数据就会实时更新,而不需要刷新页面。
    2. 使用隐藏的字段在母页面中存储数据:在母页面中添加一个隐藏的字段(如<input type="hidden" id="hiddenUserNames" />),在子页面选择用户后,除了将用户姓名存入Session,也将其存入这个隐藏字段。然后,在母页面的JavaScript代码中监听Session的变化或者定期轮询这个隐藏字段的值,从而更新显示。
    3. 确保Session状态正确共享:确保你的应用程序中的Session状态是正确共享的。如果你的应用程序分布在多个服务器或使用了负载均衡,可能需要额外的配置来确保Session状态的一致性。

    考虑到你的应用场景和代码结构,使用AJAX或隐藏的字段可能是最简单直接的解决方案。如果你不熟悉这些技术,我可以提供更详细的代码示例来帮助你实现。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月20日