我确信这很简单,但它让我发疯。
我的页面上有一个列表框来显示艺术家,当索引更改时它会调用一个方法,还有一个按钮,单击时会从另一个页面中的该列表中加载艺术家:
<asp:ListBox ID="lbArtists" runat="server" Rows="1" AutoPostBack="true" OnSelectedIndexChanged="ShowArtistsWorks" />
<asp:Button ID="btnEditArtist" runat="server" Text="Edit the artist" OnClick="LoadArtist" />
此外,我有一个类似的链接列表,其中也有一个自动回发方法:
<asp:ListBox ID="lbLinks" runat="server" Rows="1" AutoPostBack="true" OnSelectedIndexChanged="LoadLink" />
问题是,当我调用ShowArtistsWorks()
通过点击btnEditArtist
, the LoadLink()
方法也会被调用。为什么会发生这种情况?当我没有更改索引时为什么会调用它lbLinks
列表框?它不应该接近该方法。
EDIT:(相关)代码隐藏方法(
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack){
GetArtists(); // populates artists listbox
GetLinks(); // populates links listbox
}
}
protected void LoadArtist(object sender, EventArgs e){
if (lbArtists.SelectedValue != "")
Response.Redirect("Artist.aspx?id=" + lbArtists.SelectedValue);
}
protected void LoadLink(object sender, EventArgs e)
{
if (lbLinks.SelectedValue != "")
Response.Redirect("Link.aspx?id=" + lbLinks.SelectedValue);
}
EDIT #2:我可以轻松地在各个方法中对此进行修复,以阻止它们在不应该发生的情况下发生,但我想了解为什么我不调用且仅从一个地方调用的方法会被无意中调用。
接受的答案:尽管 Boon(现在的 CRice)首先提出了解释和解决方案,但我决定接受 Jeff 更彻底的解释,因为这就是我想要的,更深入的分析。感谢所有回答的人。