事件处理程序不一致

时间:2019-02-28 21:57:24

标签: c# html eventhandler linkbutton

背景

我有两个页面使用相似的代码,如果不是它们调用的函数名称,这些组件的按钮名称将是相同的。然而,在一页上,一个按钮可以完美地工作,而另一个则触发两次。在另一页上,该按钮只有在您再次单击(页面重新加载之后)才会触发。

我可能在语义或语法上缺少某些内容,但是通常,如果我在某处使用某项内容,那么它在所有地方都可以使用,并且如果我在某处没有使用某项内容,那么它将无法使用。任何地方。在这种情况下,我的结果不一致...我认为这在字面上是违反逻辑的。

下面,首先我有一些代码片段构成了我的工作按钮。下面是我无法使用的按钮的代码。我现在将忽略两次触发的按钮。

工作代码:第1页

protected void navigateView(object sender, EventArgs e) //***Fires upon single click***
{
    LinkButton lb = (LinkButton)sender;
    setCurrentlySelectedRecord(lb.CommandArgument);
    setViewEdit("View");
    Server.Transfer("Page2.aspx");
}

accessRecord()
{
    ...
    HtmlTable myTable = new HtmlTable();
    ...
    HtmlTableRow newRow;
    HtmlTableCell cell;

    LinkButton saveButton; newRow = new HtmlTableRow();
        newRow.BgColor = "black"; myTable.Rows.Add(newRow);

          cell = new HtmlTableCell(); cell.BgColor = "black";

            LinkButton viewEditBtn = new LinkButton();
            viewEditBtn.ID = "viewEdit"+rowCount; viewEditBtn.Visible = true;
            viewEditBtn.CommandArgument = ECRID;
            viewEditBtn.BackColor = Color.Teal; viewEditBtn.ForeColor = Color.Yellow; viewEditBtn.BorderColor = Color.Yellow;
            viewEditBtn.BorderStyle = BorderStyle.Solid; viewEditBtn.BorderWidth = 2; viewEditBtn.Width = 40;
            viewEditBtn.Attributes.Add("style", "text-align:center; border-color: yellow orange orange yellow; text-decoration:none");

            if (userStatus == "readonly")
            {
                viewEditBtn.Text = "View";
                viewEditBtn.Click += new EventHandler(navigateView);
            }
            else
            {
                viewEditBtn.Text = "Edit";
                viewEditBtn.Click += new EventHandler(navigateEdit);
            }
          cell.Controls.Add(viewEditBtn);
        newRow.Cells.Add(cell);
    ...
}


protected void Page_Load(object sender, EventArgs e) 
{
    accessRecord();
}

这就像一个护身符。它将我导航到我想每次使用所需值访问的页面。

但是,当对另一页上的另一个按钮使用类似的格式时,它会重新加载页面,而不是触发按钮定义中列出的方法。然后,我必须再次按下按钮才能循环记录。

无效代码:第2页

protected void cycleDesc(object sender, EventArgs e) //***Fires upon second click***
{
    cycleRecord("Desc"); 
}
protected void cycleAsc(object sender, EventArgs e) //***Fires upon second click***
{ 
    cycleRecord("Asc"); 
}
protected void cycleRecord(string cycleDirection) 
{...logic that calls the database to fetch the next record...
    setCurrentlySelectedRecord(nextRecord);//this sets the next value into the session variable
    Server.Transfer("Page2.aspx");
}
protected void loadRecordCycleButtons()
{
    PrvBTN_PH.Controls.Clear();
    NextBTN_PH.Controls.Clear();

    LinkButton prev_BTN = new LinkButton();
    prev_BTN.ID = "prev_BTN";
    prev_BTN.Text = "Previous"; prev_BTN.Visible = true;
    prev_BTN.BackColor = Color.Turquoise; prev_BTN.ForeColor = Color.Black; prev_BTN.BorderColor = Color.Gray;
    prev_BTN.BorderStyle = BorderStyle.Solid; prev_BTN.BorderWidth = 2; prev_BTN.Width = 100;
    prev_BTN.Attributes.Add("style", "text-align:center; border-color:  silver gray gray silver; text-decoration:none");
    prev_BTN.Click += new EventHandler(cycleDesc);
    PrvBTN_PH.Controls.Add(prev_BTN);

    LinkButton next_BTN = new LinkButton();
    next_BTN.ID = "next_BTN";
    next_BTN.Text = "Next"; next_BTN.Visible = true;
    next_BTN.BackColor = Color.Red; next_BTN.ForeColor = Color.Black; next_BTN.BorderColor = Color.Gray;
    next_BTN.BorderStyle = BorderStyle.Solid; next_BTN.BorderWidth = 2; next_BTN.Width = 100;
    next_BTN.Attributes.Add("style", "text-align:center; border-color: silver gray gray silver; text-decoration:none");
    next_BTN.Click += new EventHandler(cycleAsc);
    NextBTN_PH.Controls.Add(next_BTN);
}
protected void Page_Load(object sender, EventArgs e) //***Clicking the button once results in this firing again***
{
    loadRecord();
    loadRecordCycleButtons();
}

这令人困惑,我希望获得一些指导以使它们始终如一地工作。

0 个答案:

没有答案