点击时额外刷新

时间:2019-03-06 19:01:15

标签: javascript c# asp.net

我只希望在保存方法完成后触发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();
}

1 个答案:

答案 0 :(得分:0)

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

通过注释掉我在小样本中删除的内容,然后缓慢地一次添加一个元素,我发现罪魁祸首是代码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"];结合使用。

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