我只希望在保存方法完成后触发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();
}
答案 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"];
结合使用。
现在,我有了要从一个屏幕传递到另一个屏幕的数据,而且我不必多次单击按钮就很奇怪了。