ASP.NET rowcommand не работает
Я создал две кнопки на одной странице с rowcommand
& rowarguements
Тем не менее, только один из них работает нормально, я понятия не имею, почему при попытке нажать другую кнопку появляется окно "Неожиданная ошибка" (btnInterview работает нормально, btnContact
не работает)
Не только сообщение об ошибке выдается, btnContact
не может запустить событие в rowcommand
или.
Код ниже (часть ASPX):
<asp:GridView ID="GridView2" runat="server" AllowPaging="True"
EmptyDataText="No Sample is found"
OnPageIndexChanging="GridView1_PageIndexChanging"
PageSize="20"
OnSorting="GridView1_Sorting" OnDataBound="GridView1_DataBound"
OnRowCommand="GridView1_RowCommand" Width="100%" AllowSorting="True" OnRowCreated="GridView1_RowCreated">
<RowStyle HorizontalAlign="Center" VerticalAlign="Middle" />
<Columns>
<asp:TemplateField HeaderText="Phone Interview">
<ItemTemplate>
<asp:Button ID="btninterview" runat="server" Text="Interview" CommandName="btninterview_Click"
CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" CssClass="intBtn" />
<asp:HiddenField runat="server" ID="hidid" Value='<%# Bind("Id")%>' />
<asp:HiddenField runat="server" ID="hidProject" Value='<%# Bind("Project")%>' />
<asp:HiddenField ID="hidEnablebtn" runat="server" Value='<%# Bind("enableButton")%>' />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Phone Interview">
<ItemTemplate>
<asp:Button ID="btnContact" runat="server" Text="Contact" CommandName="btncontact_Click"
CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" CssClass="intBtn" />
<asp:HiddenField ID="hidVisibleBtn" runat="server" Value='<%# Bind("visibleButton")%>' />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:TemplateField>
</Columns>
</asp:GridView>
Код ниже (часть C#):
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e){
Button btn = (Button)sender;
switch (btn.CommandName)
{
case "btninterview_Click":
//do sth1
break;
case "btncontact_Click":
//do sth2
break;
}
}
2 ответа
Я надеюсь, что вы можете напрямую получить имя команды из самого GridViewCommandEventArgs, как показано ниже,
switch (**e.CommandName**)
{
case "btninterview_Click":
//do sth1
break;
case "btncontact_Click":
//do sth2
break;
}
Надеюсь, поможет!
Вы используете RowCommand
событие. В этом случае sender
это не кнопка, а сам GridView. Таким образом, вы получаете исключения Cast, поскольку вы пытаетесь привести GridView к кнопке. Вы должны быть CommandSource
,
Button btn = e.CommandSource as Button;