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;
}

REF: GridViewCommandEventArgs

Надеюсь, поможет!

Вы используете RowCommand событие. В этом случае sender это не кнопка, а сам GridView. Таким образом, вы получаете исключения Cast, поскольку вы пытаетесь привести GridView к кнопке. Вы должны быть CommandSource,

Button btn = e.CommandSource as Button;
Другие вопросы по тегам