ASP.NET 按钮不执行函数 RowCommand

ASP.NET button doesn't execute function RowCommand

提问人:Andx45t 提问时间:10/23/2023 最后编辑:marc_sAndx45t 更新时间:10/23/2023 访问量:36

问:

我在 ASPX 上使用 GridView 控制器上的按钮时遇到了一些麻烦。我只是无法让它工作。

这是我的网格视图:

<asp:GridView ID="tablaPgos" runat="server" AutoGenerateColumns="False" OnRowCommand="tablaPgos_RowCommand">
    <columns>
        <asp:BoundField DataField="idpago" HeaderText="Id" />
        <asp:BoundField DataField="fechapago" HeaderText="Fecha de Pago" />
        <asp:BoundField DataField="codigoestudiante" HeaderText="Codigo del Estudiante" />
        <asp:BoundField DataField="nombre" HeaderText="Tipo de Pago" />
        <asp:BoundField DataField="monto" HeaderText="Monto" />
        <asp:TemplateField HeaderText="Acciones">
            <itemtemplate>
                <asp:Button ID="btnEliminar" runat="server" Text="Eliminar Pago" CommandName="Eliminar" CommandArgument='<%# Container.DataItemIndex %>'/>
            </itemtemplate>
        </asp:TemplateField>
    </columns>
</asp:GridView>

数据加载完美,我使用API加载数据:

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

protected async Task CargarTabla()
{
     string apiUrl = "http://localhost:5000/api/get/pagos";

     try
     {
         HttpClient client = new HttpClient();
         HttpResponseMessage response = client.GetAsync(apiUrl).Result;

         if (response.IsSuccessStatusCode)
         {
             string jsonResponse = response.Content.ReadAsStringAsync().Result;
             List<ListadoPagos> pagos = JsonConvert.DeserializeObject<List<ListadoPagos>>(jsonResponse);
             tablaPgos.DataSource = pagos;
             tablaPgos.DataBind();
         }
         else
         {
             // Manejar errores si la solicitud no es exitosa
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }
}

我在网格视图上有一个按钮:

<asp:TemplateField HeaderText="Acciones">
    <itemtemplate>
        <asp:Button ID="btnEliminar" runat="server" Text="Eliminar Pago" CommandName="Eliminar" CommandArgument='<%# Container.DataItemIndex %>'/>
    </itemtemplate>
</asp:TemplateField>

当我单击它时,我需要它向 API 发出删除请求,但它不起作用。它没有向我显示任何错误或任何东西,似乎按钮甚至没有调用该函数。

这是我一直在尝试做的事情:

protected async void tablaPgos_RowCommand(object sender, GridViewCommandEventArgs e)
{
      if (e.CommandName == "Eliminar")
      {
          int rowIndex = Convert.ToInt32(e.CommandArgument);

          int id = Convert.ToInt32(tablaPgos.DataKeys[rowIndex]["idpago"]);
          await EliminarPagoAsync(id);
      }
}
private async Task EliminarPagoAsync(int idPago)
{
    try
    {
        using (var httpClient = new HttpClient())
        {
            string apiUrl = $"http://localhost:5000/api/delete/pago/{idPago}";

            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = await httpClient.DeleteAsync(apiUrl);

            if (response.IsSuccessStatusCode)
            {
                lblMensaje.Text = "Pago eliminado exitosamente.";
                CargarTabla();
            }
            else
            {
                lblMensaje.Text = "Error al eliminar el pago. Por favor, intente nuevamente.";
                CargarTabla();
            }
        }
    }
    catch (Exception ex)
    {
        lblMensaje.Text = "Error: " + ex.Message;
    }
}

正如我所说,该按钮甚至不调用该函数。我尝试设置标签的文本只是为了确保问题不在于按钮,但是当我单击它时不会显示消息,因此我假设问题出在按钮上,而不是 API 或其他:(

protected async void tablaPgos_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Eliminar")
    {
        int rowIndex = Convert.ToInt32(e.CommandArgument);

        lMensaje.Text = "Button Pressed";
    }
}

如果您能提供帮助,我将不胜感激!

谢谢

C# asp.net GridView Web 窗体

评论


答:

1赞 Josh 10/23/2023 #1
protected async void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        CargarTabla();
    }    
}

在每次回发时停止绑定(按钮单击等)