如何在ASP.net C#背后的代码中添加jquery .trigger

问题描述

生成Gridview后,我需要自动单击隐藏按钮,

$("#<%=btnExcel.ClientID%>").trigger("click");

可以正常工作,但是我需要在生成Gridview之后在Codebehind下添加它,我尝试添加一个函数,然后在OnRowdatabound事件中调用它:

//I tried creating a function
<script type="text/javascript">
    function Excel() {
        $("#<%=btnExcel.ClientID%>").trigger("click");
    }
</script>

所有CS代码

public partial class ReportesCasos : System.Web.UI.Page
{
    string BaseX = "SELECT disTINCT Casos.Cliente AS idCliente,Casos.Asignado AS Usuario,Casos.idCaso AS 'N° Caso',Clientes.nombre AS Cliente,Asunto,Estado.Descripcion AS 'Estado Actual',Causa.Descripcion AS Causa_Raiz,Usuarios.Login AS 'Tecnico_Asignado',Zona.Descripcion AS 'Zona',Sector.Sector AS 'Sector',Usuarios.Login AS 'Asignado',CONVERT (nchar,Casos.Reportado," + funciones.Fecha() + ") AS Reportado,Casos.Cerrado," + funciones.Fecha() + ") AS Cerrado,Casos.Vencimiento," + funciones.Fecha() + ") AS Vencimiento,fecha,CONVERT(nchar," + funciones.Fecha() + ") As Fecha2,TipoCaso.Descripcion AS TipoCaso,Prioridad.Descripcion AS Prioridad,Casos.Horas AS HorasTrabajadas,Casos.Atendidos AS EquiposAtendidos,Casos.Contrato AS BajoContrato,Casos.Valoracion AS Evaluacion,Casos.Facturado AS facturado,Casos.Factura AS 'N° Factura',Casos.Contacto AS ContactoCliente,Casos.Diagnostico AS Diagnostico,Casos.solucion AS Solucion FROM Casos INNER JOIN TipoCaso ON Casos.TipoCaso = TipoCaso.idTipo INNER JOIN Prioridad ON Casos.Prioridad = Prioridad.idPrioridad INNER JOIN Estado ON Casos.Estado = Estado.idEstado INNER JOIN Usuarios ON Casos.Asignado = Usuarios.idUsuario INNER JOIN clientes ON idCliente = Casos.Cliente INNER JOIN (SELECT Caso,MAX(Fecha)AS Fecha FROM HistorialEstado";
    string BaseX1 = " GROUP BY Caso) AS HistorialEstado ON Caso = idCaso INNER JOIN Zona ON Casos.Zona = Zona.idZona INNER JOIN Sector ON Casos.Sector = Sector.idSector INNER JOIN Causa ON Casos.Causa = Causa.idCausa WHERE tipocaso <> 5 AND ";
    string ColaX2 = " ORDER BY idCaso";
    string ClienteX = "";

    protected void Page_Load(object sender,EventArgs e)
    {
        if (Request.Cookies["Usuario"] == null || Session["Sesion"] == null || !funciones.ChequearUsuario(Request.Cookies["Usuario"]["sesion"],Session["Sesion"].ToString()) || Session["Nivel"].ToString() == "3")
        {
            Response.Redirect("index.aspx");
        }
        Session["Titulo"] = "REPORTE EN GENERAL";
        Session["Error"] = "";
        if (Session["Cliente"].ToString() != "")
        {
            Cliente = " AND Casos.Cliente = '" + Session["Cliente"].ToString() + "'";
        }
        else
        {
            Cliente = "";
        }

    }
    protected void dlPeriodo_SelectedindexChanged(object sender,EventArgs e)
    {
        if (dlPeriodo.Selectedindex != 6)
        {
            lblDesde.Visible = false;
            lblHasta.Visible = false;
            tbDesde.Visible = false;
            tbHasta.Visible = false;
        }
        else
        {
            lblDesde.Visible = true;
            lblHasta.Visible = true;
            tbDesde.Visible = true;
            tbHasta.Visible = true;
        }
    }
    protected void btnVer2_Click(object sender,ImageClickEventArgs e)
    {
        
        if (dlPeriodo.Selectedindex != 6)
        {
            sqlDataSourceBusqueda2.SelectCommand = BaseX + BaseX1 + " Fecha >= CONVERT(DateTime,'" + DateTime.Now.AddDays(-Int32.Parse(dlPeriodo.SelectedValue)).ToShortDateString() + "'," + funciones.Fecha() + ") AND Fecha <= CONVERT(DateTime,'" + DateTime.Now.AddDays(1).ToShortDateString() + "'," + funciones.Fecha() + ")" + ClienteX;
            Session["sql"] = sqlDataSourceBusqueda2.SelectCommand;
            
        }
        else
        {
            DateTime Fecha;
            if (DateTime.TryParse(tbDesde.Text,out Fecha))
            {
                if (DateTime.TryParse(tbHasta.Text,out Fecha))
                {
                    sqlDataSourceBusqueda2.SelectCommand = BaseX + BaseX1 + " Fecha >= CONVERT(DateTime," + funciones.Fecha() + ")" + ClienteX;
                    Session["sql"] = sqlDataSourceBusqueda2.SelectCommand;

                }
                else
                {
                    string Formato = "";
                    if (funciones.Fecha() == "101")
                    {
                        Formato = " mm/dd/aaaa";
                    }
                    else
                    {
                        Formato = " dd/mm/aaaa";
                    }
                    Session["Error"] = "La fecha debe ser de la forma" + Formato;
                }
            }
            else
            {
                string Formato = "";
                if (funciones.Fecha() == "101")
                {
                    Formato = " mm/dd/aaaa";
                }
                else
                {
                    Formato = " dd/mm/aaaa";
                }
                Session["Error"] = "La fecha debe ser de la forma" + Formato;
            }

        }
            
    }
protected void GrdCartelera2_PageIndexChanged(object sender,EventArgs e)
    {
        sqlDataSourceBusqueda2.SelectCommand = Session["sql"].ToString();
    }
protected void GrdCartelera2_Sorted(object sender,EventArgs e)
    {
        sqlDataSourceBusqueda2.SelectCommand = Session["sql"].ToString();  
    }
private void ExportGridToExcel()
    {
        Response.Clear();
        Response.Buffer = true;
        Response.ContentType = "application/ms-excel";
        response.addheader("content-disposition",string.Format("attachment;filename={0}.xls","Redex_ReporteCasos"));
        Response.Charset = "";
        StringWriter stringwriter = new StringWriter();
        HtmlTextWriter htmlwriter = new HtmlTextWriter(stringwriter);
        GridView2.RenderControl(htmlwriter);
        Response.Write(stringwriter.ToString());
        Response.End();
        ExportGridToExcel();

    }      
    protected void btnexportExcel_Click(object sender,ImageClickEventArgs e)
     {
        ExportGridToExcel(); 
     }
    protected void GridView2_RowDataBound(object sender,GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DaTarow)
        {
            if (funciones.Anexos(((System.Web.UI.WebControls.HyperLink)(e.Row.Cells[1].Controls[0])).Text))
            {
                Image Imagen = new Image();
                Imagen.ImageUrl = "~/Imagenes/Iconos/anexo.png";
                e.Row.Cells[0].Text = "Si";
                
            }
            else
            {
                e.Row.Cells[0].Text = "No";
                
            }
            
            string BajoContrato = e.Row.Cells[15].Text.ToString();
            if (BajoContrato == "False")
            {
                e.Row.Cells[15].Text = "No";
            }
            else
            {
                e.Row.Cells[15].Text = "Si";
            }
            btnexportExcel_Click(null,null);
        }
        
    }
    public override void VerifyRenderingInServerForm(Control control) {} 
}

ASPX

<table style="width: 770px; height: 492px">
            <tr>
                <td align="center" style="height: 7%;" valign="middle">
                    <asp:Label ID="Label2" runat="server" Font-Bold="True" Font-Names="Century Gothic"
                        ForeColor="#00C000" Text="En el periodo" Font-Size="Small"></asp:Label></td>
                <td align="center" style="height: 7%;" valign="middle">
                    <asp:DropDownList ID="dlPeriodo" runat="server" BackColor="AliceBlue"
                        EnableTheming="True" Font-Bold="True" Font-Names="Century Gothic" ForeColor="#00C000"
                        OnSelectedindexChanged="dlPeriodo_SelectedindexChanged" Width="192px" Font-Size="Small" AutopostBack="True">
                        <asp:ListItem Value="0">Hoy</asp:ListItem>
                        <asp:ListItem Value="1">1 Dia</asp:ListItem>
                        <asp:ListItem Value="5">5 Dias</asp:ListItem>
                        <asp:ListItem Value="7">7 Dias</asp:ListItem>
                        <asp:ListItem Value="15">15 Dias</asp:ListItem>
                        <asp:ListItem Value="30">30 Dias</asp:ListItem>
                        <asp:ListItem Value="6">Especifico</asp:ListItem>
                    </asp:DropDownList></td>
                <td align="center" style="height: 7%; text-align: right;" valign="middle">
                    <asp:ImageButton ID="btnVer" runat="server" Height="24px" ImageUrl="~/Imagenes/Iconos/buscar.png"
                        OnClick="btnVer_Click" Width="22px" /></td>
                <td align="left" colspan="1" valign="middle" class="style1">
                    &nbsp;<asp:ImageButton ID="btnVer0" runat="server" 
                        Height="20px" ImageUrl="~/Imagenes/Iconos/excel.png"
                        OnClick="btnVer2_Click" Width="26px" /> 
                    <asp:ImageButton ID="btnExcel" style="visibility: hidden; display: none;" runat="server" ImageUrl="~/Imagenes/Iconos/excel.png"
                        OnClick="btnexportExcel_Click" Width="20px" Height="21px"/>
                    </td>
                <td align="center" colspan="2" style="height: 7%" valign="middle">
                    &nbsp;</td>
            </tr>
            <tr>
                <td align="center" style="height: 8%;" valign="middle">
                    <asp:Label ID="lblDesde" runat="server" Font-Bold="True" Font-Names="Century Gothic"
                        ForeColor="#00C000" Text="Desde" Visible="False" Font-Size="Small"></asp:Label></td>
                <td align="center" style="height: 8%;" valign="middle">
                    <asp:TextBox ID="tbDesde" runat="server" BackColor="AliceBlue" Font-Bold="True" Font-Names="Century Gothic"
                        ForeColor="#00C000" MaxLength="50" Visible="False" Width="192px" 
                        Font-Size="Small"></asp:TextBox></td>
                <td align="center" style="height: 8%;" valign="middle">
                    <asp:Label ID="lblHasta" runat="server" Font-Bold="True" Font-Names="Century Gothic"
                        ForeColor="#00C000" Text="Hasta" Visible="False" Font-Size="Small"></asp:Label></td>
                <td align="left" valign="middle" class="style2">
                    <asp:TextBox ID="tbHasta" runat="server" BackColor="AliceBlue" Font-Bold="True" Font-Names="Century Gothic"
                        ForeColor="#00C000" MaxLength="50" Visible="False" Width="192px" 
                        Font-Size="Small"></asp:TextBox></td>
                <td align="center" style="height: 8%" valign="middle" colspan="2">
                    &nbsp;</td>
            </tr>
            <tr>
                <td align="left" colspan="6" style="height: 105%" valign="top">
                <%if(Session["Nivel"].ToString() != "4"){ %>
                    <asp:GridView ID="GridView2" runat="server" AllowPaging="False"
                        CellPadding="2" DataSourceID="sqlDataSourceBusqueda2" Font-Names="Century Gothic"
                        ForeColor="#333333" GridLines="None" PageSize="50" Width="769px" 
                        AutoGenerateColumns="False" Font-Size="Small" 
                        OnPageIndexChanged="GrdCartelera2_PageIndexChanged" 
                        OnSorted="GrdCartelera2_Sorted"  OnRowDataBound="GridView2_RowDataBound">
                        <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                        <Columns>
                            <asp:ImageField HeaderText="Anexos">
                            </asp:ImageField>
                            <asp:HyperLinkField DatanavigateUrlFields="N&#176; Caso" DatanavigateUrlFormatString="Casos.aspx?idCaso={0}"
                                DataTextField="N&#176; Caso" HeaderText="Caso"
                                SortExpression="N&#176; Caso" />
                            <asp:BoundField datafield="Cliente" HeaderText="Cliente" SortExpression="Cliente" />
                            <asp:BoundField datafield="ContactoCliente" HeaderStyle-CssClass="hiddencol" ItemStyle-CssClass="hiddencol" HeaderText="Contacto Cliente" SortExpression="ContactoCliente" />
                            <asp:BoundField datafield="TipoCaso" HeaderText="Tipo Caso" SortExpression="TipoCaso" />
                            <asp:BoundField datafield="Asunto" HeaderStyle-CssClass="hiddencol" ItemStyle-CssClass="hiddencol" HeaderText="Asunto" SortExpression="Asunto" />
                            <asp:BoundField datafield="Asignado" HeaderText="Tecnico" SortExpression="Asignado" />
                            <asp:BoundField datafield="Causa_Raiz" HeaderText="Causa Raiz" SortExpression="Causa_Raiz" />
                            <asp:BoundField datafield="Zona" HeaderText="Zona" SortExpression="Zona" />
                            <asp:BoundField datafield="Sector" HeaderStyle-CssClass="hiddencol" ItemStyle-CssClass="hiddencol" HeaderText="Sector" SortExpression="Sector" />
                            <asp:BoundField datafield="Estado Actual" HeaderText="Estado" SortExpression="Estado Actual" />
                            <asp:BoundField datafield="Prioridad" HeaderStyle-CssClass="hiddencol" ItemStyle-CssClass="hiddencol" HeaderText="Prioridad" SortExpression="Prioridad" />
                            <asp:BoundField datafield="HorasTrabajadas" HeaderText="Horas Trabajadas" SortExpression="HorasTrabajadas" />
                            <asp:BoundField datafield="Evaluacion" HeaderStyle-CssClass="hiddencol" ItemStyle-CssClass="hiddencol" HeaderText="Evaluacion" SortExpression="Evaluacion" />
                            <asp:BoundField datafield="EquiposAtendidos" HeaderText="Equipos Atendidos" SortExpression="EquiposAtendidos" />
                            <asp:BoundField datafield="BajoContrato" HeaderStyle-CssClass="hiddencol" ItemStyle-CssClass="hiddencol" HeaderText="Bajo Contrato" SortExpression="BajoContrato" />
                            <asp:BoundField datafield="N° Factura" HeaderStyle-CssClass="hiddencol" ItemStyle-CssClass="hiddencol" HeaderText="N°Factura" SortExpression="N° Factura" />
                            <asp:BoundField datafield="Diagnostico" HeaderStyle-CssClass="hiddencol" ItemStyle-CssClass="hiddencol" HeaderText="Diagnostico" SortExpression="Diagnostico" />
                            <asp:BoundField datafield="Solucion" HeaderStyle-CssClass="hiddencol" ItemStyle-CssClass="hiddencol" HeaderText="Solucion" SortExpression="Solucion" />
                            <asp:BoundField datafield="Reportado" HeaderText="Reportado" SortExpression="Reportado" />
                            <asp:BoundField datafield="Cerrado" HeaderStyle-CssClass="hiddencol" ItemStyle-CssClass="hiddencol" HeaderText="Cerrado" SortExpression="Cerrado" />
                            <asp:BoundField datafield="Vencimiento" HeaderText="Vencimiento" SortExpression="Vencimiento" />
                        </Columns>
                        <RowStyle BackColor="#EFF3FB" />
                        <EditRowStyle BackColor="#2461BF" />
                        <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                        <AlternatingRowStyle BackColor="White" />
                    </asp:GridView>
                    <%}%>
<asp:sqlDataSource ID="sqlDataSourceBusqueda2" runat="server" ConnectionString="<%$ ConnectionStrings:conexion %>"
                        ProviderName="<%$ ConnectionStrings:conexion.ProviderName %>"></asp:sqlDataSource>

解决方法

有多种解决方案,但是您需要尝试多种解决方案,以便您分析哪种解决方案适合您的需求。

解决方案1 ​​如果您打算执行服务器端事件,则可以从后面的代码中简单地调用该方法,而不用假装单击。在后面的代码中像这样调用事件方法。

btnExcel_Clicked(null,null);

您可以像这样消费它:

protected void GridView2_RowDataBound(object sender,GridViewRowEventArgs e)
{
    // ... Your code
    btnExcel_Clicked(null,null); //  I assume your btnExcel button is linked to this event.
}

解决方案2 如果需要只使用JavaScript / Jquery,这会有所帮助。

var myButtonID = btnExcel.ClientID;
Page.ClientScript.RegisterStartupScript(this.GetType(),"Trigger","$("#"+ myButtonID +"").trigger("click");",true);

解决方案3 解决方案2,带有javascript事件。

var myButtonID = btnExcel.ClientID;
Page.ClientScript.RegisterStartupScript(this.GetType(),"document.getElementById(" + myButtonID + ").onclick();",true);

我认为在RowDataBound事件上调用它不是一个好主意,因为它不仅会在加载网格视图时触发多次。因此,必须在调用GridView2.DataBind()方法之后而不是在RowDataBound事件内部调用它。


解决方案4 这是一个基于页面流的纯解决方案。诀窍是使用CodeBehind标志从javascript执行javascript。这是您的操作方式:

首先在CodeBehind中声明一个属性。

public bool ShouldTriggerClickEvent { get; set; }

然后,在您的Page_Load事件中,将flase分配为此属性的值,并在true事件被完全触发时将其设为RowDataBound。参见:

protected void Page_Load(object sender,EventArgs e)
{
    if (!Page.IsPostback)
    {
        ShouldTriggerClickEvent = false;
    }
}

现在,在您的RowDataBound事件中将其设置为真。

protected void GridView2_RowDataBound(object sender,GridViewRowEventArgs e)
{
    // ... Your code
    ShouldTriggerClickEvent = true;
}

现在,页面加载完成后,您需要在客户端检查此标志,如果该标志为true,则执行代码。如下所示:

<script>
    $(document).ready(function(){
        function shouldTriggerClickEvent(){
            return '<%= ShouldTriggerClickEvent %>' == 'True';
        }
        if (shouldTriggerClickEvent()){
            $("#<%=btnExcel.ClientID%>").trigger("click");
        }
    });
</script>

我提到了到目前为止我还可以记住的多种解决方案,您可以看到哪一种对您来说很好。


更新

在询问要在哪里调用该方法时,建议您在绑定DataSource之后立即调用该方法。

// After this line
GridView2.DataBind(); //  so each time the data is populated in it,this will method will be called
btnExcel_Clicked(null,null);

您还可以检查您的DataSource中是否有项目,只有这样,您才可能要调用它,就像您询问何时加载GridView时(我认为这意味着,只有在它包含行之后才加载)它。

// Lets assume you have a DataTable object that is the DataSource of the GridView
var dataTable = GetDataTable(); // Some method that will fetch the rows

GridView2.DataSource = dataTable;
GridView2.DataBind(); //  so each time the data is populated in it,this will method will be called
if (dataTable != null && dataTable.Rows.Count > 0)
{
    btnExcel_Clicked(null,null);
}

更新2

好的,因此您想在将数据绑定到GridView并使用SqlDataSource绑定GridView之后调用执行事件。这是我的修改建议。

将您的SqlDataSource替换为包含OnSelected事件。

<asp:SqlDataSource ID="SqlDataSourceBusqueda2" runat="server" 
     ConnectionString="<%$ ConnectionStrings:conexion %>"
     ProviderName="<%$ ConnectionStrings:conexion.ProviderName %>"
     OnSelected="SqlDataSourceBusqueda2_Selected">
</asp:SqlDataSource>

然后将此方法/事件添加到您的CodeBehind

protected void SqlDataSourceBusqueda2_Selected(object sender,SqlDataSourceStatusEventArgs e)
{
    // Your Code goes here.
    btnExcel_Clicked(null,null);
}