无法访问代码隐藏中的按钮
Cant access button in codebehind
我的 .aspx 文件中有这个按钮,我想在我的 codeBehind .aspx.cs 文件中访问它。
它在 ListView 中,所以我假设这就是问题所在(我可以毫无问题地访问该 ListView 之外的任何元素)- 似乎无法弄清楚。
按钮代码(位于 ID 为 lvInstructorList 的 ListView 中):
<div class="col-3 checkInBtnDiv" runat="server">
<asp:Button class="checkInBtn" ID="checkInBtn" runat="server" OnClick="CheckInBtn_Click" Text="Check-In"></asp:Button>
</div>
到目前为止我在 codeBehind 中尝试过的内容:
1)
protected void CheckInBtn_Click(object sender, EventArgs e)
{
(lvInstructors.FindControl("checkInBtn") as Button).Text = "New text";
}
2)
protected void CheckInBtn_Click(object sender, EventArgs e)
{
var ctrl = (Control)sender;
var lvi = (ListViewItem)ctrl.NamingContainer;
var checkInBtn = (IButtonControl)lvi.FindControl("checkInBtn");
checkInBtn.Text = "New Text";
}
但这些选项均无效。有 ideas/tips 吗?谢谢!
这是我的整个 ListView:
<asp:ListView
ID="lvInstructors"
runat="server"
AutoGenerateColumns="False"
ShowRegularGridWhenEmpty="False"
EmptyDataText="No Sessions to Display."
OnRowDataBound="lvDataBound"
OnRowCommand="lvCommand"
Visible="true">
<LayoutTemplate>
<div class="container" id="mainContent">
<asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
</div>
</LayoutTemplate>
<ItemTemplate>
<div class="row instructorItem">
<div class="col-2 sessionStartTimeDiv">
<p class="sessionStartTime"><%#Eval("SessionStartTime")%></p>
</div>
<div class="col-2 instructorHeadshotDiv">
<asp:Image class="instructorHeadshot" runat="server" src='<%#Eval("InstructorHeadshot")%>' />
</div>
<div class="col-5 sessionInfoDiv">
<h3 class="instructorName"><%#Eval("InstructorName")%></h3>
<p class="sessionInfo"><%#Eval("SessionInfo")%></p>
</div>
<div class="col-3 checkInBtnDiv">
<asp:Button class="checkInBtn" ID="checkInBtn" runat="server" OnClick="CheckInBtn_Click" Text="Check-In"></asp:Button>
</div>
</div>
<hr />
</ItemTemplate>
<EmptyDataTemplate>
<br />
<br />
No Sessions to Display
</EmptyDataTemplate>
</asp:ListView>
您始终可以将发送者转换回 Button。
protected void checkInBtn_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
btn.Text = "New text";
}
您的 2 个代码段不起作用的原因是 ListView 中的项目是基于索引的。你需要做这样的事情。
Button btn = ListView1.Items[i].FindControl("checkInBtn") as Button;
我的 .aspx 文件中有这个按钮,我想在我的 codeBehind .aspx.cs 文件中访问它。
它在 ListView 中,所以我假设这就是问题所在(我可以毫无问题地访问该 ListView 之外的任何元素)- 似乎无法弄清楚。
按钮代码(位于 ID 为 lvInstructorList 的 ListView 中):
<div class="col-3 checkInBtnDiv" runat="server">
<asp:Button class="checkInBtn" ID="checkInBtn" runat="server" OnClick="CheckInBtn_Click" Text="Check-In"></asp:Button>
</div>
到目前为止我在 codeBehind 中尝试过的内容: 1)
protected void CheckInBtn_Click(object sender, EventArgs e)
{
(lvInstructors.FindControl("checkInBtn") as Button).Text = "New text";
}
2)
protected void CheckInBtn_Click(object sender, EventArgs e)
{
var ctrl = (Control)sender;
var lvi = (ListViewItem)ctrl.NamingContainer;
var checkInBtn = (IButtonControl)lvi.FindControl("checkInBtn");
checkInBtn.Text = "New Text";
}
但这些选项均无效。有 ideas/tips 吗?谢谢!
这是我的整个 ListView:
<asp:ListView
ID="lvInstructors"
runat="server"
AutoGenerateColumns="False"
ShowRegularGridWhenEmpty="False"
EmptyDataText="No Sessions to Display."
OnRowDataBound="lvDataBound"
OnRowCommand="lvCommand"
Visible="true">
<LayoutTemplate>
<div class="container" id="mainContent">
<asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
</div>
</LayoutTemplate>
<ItemTemplate>
<div class="row instructorItem">
<div class="col-2 sessionStartTimeDiv">
<p class="sessionStartTime"><%#Eval("SessionStartTime")%></p>
</div>
<div class="col-2 instructorHeadshotDiv">
<asp:Image class="instructorHeadshot" runat="server" src='<%#Eval("InstructorHeadshot")%>' />
</div>
<div class="col-5 sessionInfoDiv">
<h3 class="instructorName"><%#Eval("InstructorName")%></h3>
<p class="sessionInfo"><%#Eval("SessionInfo")%></p>
</div>
<div class="col-3 checkInBtnDiv">
<asp:Button class="checkInBtn" ID="checkInBtn" runat="server" OnClick="CheckInBtn_Click" Text="Check-In"></asp:Button>
</div>
</div>
<hr />
</ItemTemplate>
<EmptyDataTemplate>
<br />
<br />
No Sessions to Display
</EmptyDataTemplate>
</asp:ListView>
您始终可以将发送者转换回 Button。
protected void checkInBtn_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
btn.Text = "New text";
}
您的 2 个代码段不起作用的原因是 ListView 中的项目是基于索引的。你需要做这样的事情。
Button btn = ListView1.Items[i].FindControl("checkInBtn") as Button;