首页 > 解决方案 > 点击时额外刷新

问题描述

我只希望在Page_Load保存方法完成后触发该方法。

我创建了一个网页/站点,用作 MySQL 数据库的用户界面。最初我使用纯 JavaScript 和 HTML,它很实用,但很烦人,因为用户每次从一个页面导航到另一个页面时都必须点击三个确认按钮。

我通过将数据库调用转移到 .aspx.cs 文件以及一些表单和报告的数量来消除这种烦恼。然而,虽然页面/站点现在再次正常运行,但现在它需要用户按下保存按钮,然后将他们希望保存的数据插入数据库,然后再次按下保存。同样,如果他们希望在详细视图中查看记录,然后循环浏览记录,他们必须按两次下一个或上一个按钮。

我已经在调试中进行了跟踪,并且第一次单击按钮时,它会命中该Page_Load方法,但没有别的。然后,当您再次单击时,它会点击按钮链接到的方法,然后点击该Page_Load方法。

这很烦人,因为用户希望输入一次信息,然后点击保存并让信息保持原样......不会消失,需要第二次输入。

我不想像在这里所做的那样关闭页面加载:https ://stackoverflow.com/a/19454346/11035837

我只希望它在保存方法完成后触发。

我该怎么做呢?

以下是我正在使用的 c# 方法(精简)。尽我所能告诉他们在文件中的放置顺序没有影响。

当方法是按钮构造中引用的方法时,为什么Page_Load要调用该方法?saveRecord

protected void Page_Load(object sender, EventArgs e)
{
    loadRecord();
    loadBackButton();
    loadRecordCycleButtons();
    loadSaveButton();
}
protected void loadSaveButton()
{
    SAVE_PH.Controls.Clear();
    string prevPage = getPreviousPage();

    string accessStatus = getViewEdit();

    LinkButton save_BTN = new LinkButton();
    save_BTN.ID = "save_BTN";
    save_BTN.Text = "Save"; save_BTN.Visible = true;
    save_BTN.BackColor = Color.Green; save_BTN.ForeColor = Color.Black; save_BTN.BorderColor = Color.Gray;
    save_BTN.BorderStyle = BorderStyle.Solid; save_BTN.BorderWidth = 2; save_BTN.Width = 60;
    save_BTN.Attributes.Add("style", "text-align:center; border-color: white gray gray white; text-decoration:none");
    save_BTN.Click += new EventHandler(saveRecord);
    if (accessStatus != "View") { SAVE_PH.Controls.Add(save_BTN); }
}

protected void saveRecord(object sender, EventArgs e) 
{ string RecordNumber =getCurrentlySelectedRecord();
    PlaceHolder MAIN = Page.FindControl("RECORD_PH") as PlaceHolder;
    /*...fetch values for parameters ...*/

    MySqlConnection conn = new MySqlConnection();
    conn.ConnectionString = getConnectionString();
    conn.Open();
    MySqlCommand cmd = new MySqlCommand();
    cmd.Connection = conn;
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "UPDATE_RECORD";
    cmd.Parameters.Clear();
    cmd.Parameters.Add(new MySqlParameter("@V_RECORD_NUMBER", RecordNumber)); cmd.Parameters["@V_RECORD_NUMBER"].Direction = ParameterDirection.Input;
    /*...Set other parameters...*/
    try
    {
        cmd.ExecuteNonQuery();
    }
    catch (MySql.Data.MySqlClient.MySqlException ex)
    {
        Response.Write("<script>alert(\"Error\"+" + ex.ToString() + " );</script>");
        var abc = "abc";//debug line for tracing
    }

    conn.Close();
}

标签: javascriptc#asp.net

解决方案


我已经获取了完整的代码并将其剥离为仅按钮,当我将其粘贴到新网页中时,该页面会正确执行。

通过注释掉我在小样本中删除的内容,然后一次缓慢地添加一个元素,我发现罪魁祸首是代码Server.Transfer("page.aspx");

具有此代码的每个按钮都需要选择该按钮两次才能触发该按钮。

由于第一页使用它导航到第二页,因此必须先按下任何 asp 控制按钮,然后才能正确执行任何按钮。

所以我正在取消使用Server.Transfer("page.aspx");并寻找替代品。

相反,我在页面加载屏幕中使用了类似代码prev_BTN.Attributes.Add("href", "RecordDetailPage?RecNum=" + getPreviousRecord());RORQL_BTN.Attributes.Add("href", "RecordLstPage?ViewEdit=view"); 与之相结合的代码。String REC = Request.QueryString["RecNum"];String REC = Request.QueryString["ViewEdit"];

现在我有了想要从一个屏幕传递到另一个屏幕的数据,而且我不必多次单击按钮。


推荐阅读