Gewusst wie: ausführen mehrerer ClientScript.RegisterStartupScript in ASP.NET c#?
Entwickle ich ein gridview, in dem Sie mehrere Dateien herunterladen, die mit einem Knopf.
Hier mein gridview:
<asp:GridView ID="grdvHistorialMensajes" runat="server" AllowPaging="True"
AutoGenerateColumns="False" CellPadding="4" AllowSorting="true"
EmptyDataText="No Hay Mensajes Enviados" ForeColor="#333333"
GridLines="None" CellSpacing="1"
onpageindexchanging="grdvHistorialMensajes_PageIndexChanging"
onrowcommand="grdvHistorialMensajes_RowCommand"
onsorting="grdvHistorialMensajes_Sorting">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:BoundField DataField="CorreoCliente" HeaderText="Correo Del Cliente" SortExpression="CorreoCliente" />
<asp:BoundField DataField="CorreosAdicionales" HeaderText="Correos Adicionales" SortExpression="CorreosAdicionales" />
<asp:BoundField DataField="Tema" HeaderText="Tema" SortExpression="Tema" />
<asp:BoundField DataField="Mensaje" HeaderText="Mensaje" SortExpression="Mensaje" />
<asp:TemplateField HeaderText="Fecha" SortExpression="Fecha">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "Fecha", "{0:dd/MM/yyyy}")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="tbxFecha" runat="server" Text='<%#Bind("Fecha","{0:dd/MM/yyyy}") %>' ValidationGroup="gpEdicionAgenda">
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Hora" HeaderText="Hora" SortExpression="Hora" />
<asp:BoundField DataField="Archivos" HeaderText="Archivos" SortExpression="Archivos" />
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="imgBtnDescargarArchivos" runat="server"
CommandArgument='<%# Eval("IdMensaje")%>' CommandName="Descargar" Height="16px"
ImageUrl="~/img/activar.png" ToolTip="Descargar" Width="16px" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="imgBtnVerMas" runat="server"
CommandArgument='<%# Eval("IdMensaje")%>' CommandName="VerMas" Height="16px"
ImageUrl="~/img/search.png" ToolTip="Ver Mas" Width="16px" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EditRowStyle BackColor="#999999" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#E9E7E2" />
<SortedAscendingHeaderStyle BackColor="#506C8C" />
<SortedDescendingCellStyle BackColor="#FFFDF8" />
<SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>
Immer, wenn ich Sie auf "Descargar" RowCommand, die ich ursprünglich verwendet:
if (e.CommandName == "Descargar")
{
DataTable dt = ConexionBD.GetInstanciaConexionBD().GetArchivosPorMensaje(Convert.ToInt32(e.CommandArgument));
foreach (DataRow dr in dt.Rows)
{
string strArchivo = dr["Nombre"].ToString();
string strExtension = Path.GetExtension(strArchivo).ToLower();
Response.Write("<script>window.open('/Archivos/" + strArchivo + "');</script>");
}
}
Wenn ich geklickt, wenn diese Zeile hatte sagen wir mal 1 pdf-Datei, 1 jpg-und 1 doc, es eröffnet sowohl die pdf-Datei und das jpg in einem anderen Fenster, und der doc würde heruntergeladen werden. Das ist genau das, was ich will. Allerdings ist mir aufgefallen, dass immer wenn eine neue Seite geöffnet wird (im Fall von pdf-und jpg) alle die schriftart in die Seite verändert wird. Also wollte ich eine Lösung finden, und dann habe ich versucht, dieses:
if (e.CommandName == "Descargar")
{
DataTable dt = ConexionBD.GetInstanciaConexionBD().GetArchivosPorMensaje(Convert.ToInt32(e.CommandArgument));
foreach (DataRow dr in dt.Rows)
{
string strArchivo = dr["Nombre"].ToString();
string strExtension = Path.GetExtension(strArchivo).ToLower();
ClientScript.RegisterStartupScript(this.GetType(), "myFileOpenScript", "<script>window.open('/Archivos/" + strArchivo + "');</script>");
}
}
Wenn ich eine pdf-Datei öffnen, wird die schriftart nicht geändert, die dieses mal jedoch, Es würde nur öffnen/download der ersten Datei, die angezeigt wird int dt.Zeilen[0] (dt.Zeilen[1] ist nicht offen). Ich nehme an, dass eine Antwort.Schreiben Sie bereitgestellt werden kann, mehrere Male, jedoch ein ClientScript.RegisterStartupScript wahrscheinlich kann nur einmal ausgeführt werden.
Gibt es eine andere Methode, die ich verwenden können, um zu verändern nicht die Seite die Buchstaben-schriftart und öffnen Sie mehrere Dateien mit einem einzigen Klick?
Oder wie könnte ich ausführen ClientScript.RegisterStartupScript mehrere Male??
Vielen Dank Im Voraus
InformationsquelleAutor Victor | 2012-09-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein wenig mehr Informationen wären hilfreich. Sie beschränken sich nicht nur aus mit RegisterStatupScript mehr als einmal, aber Sie sind begrenzt von der Registrierung des gleichen Typ/Schlüssel-Kombination mehr als einmal (das ist ein feature, keine Einschränkung).
Wenn Sie sich registrieren müssen verschiedene Skripte, verwenden Sie einen eindeutigen Schlüssel. Wenn Sie einfach tun, ein postback, sich erneut zu registrieren und das startup-script wird/sollte funktionieren.
http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.aspx
Danke.... Sie meinen Tag gerettet !!!
InformationsquelleAutor Jaime Torres
Den Skript-key hier ist
myFileOpenScript
.Können Sie
Guid.NewGuid()
zu generieren, eine andere Taste jedes mal. Und würden Sie wahrscheinlich verwenden wollenstatt. Den letzten parameter (boolean) erzählt Sie zum erstellen der
script
tags für Sie, so dass der Skript parameter enthalten kann, die nur Ihren code keine sorgen über die tags.InformationsquelleAutor BrunoLM
Du hast Recht, zu vermeiden, mit
Response.Write
in einem event-handler so: es wird ausgeführt, bevor dieRender
phase der Lebenszyklus der Seite, und deshalb Ausgänge an der Spitze der HTML-Seite.Könnte man eine
StringBuilder
zu bauen, das Skript in derforeach DataRow
Schleife, dann registrieren Sie es einmal.InformationsquelleAutor Joe
Da Jamie reißt Antwort fehlt ein Beispiel
Dies ist korrekt,
Dies ist falsch, denn der 3. parameter ist die gleiche in beiden
InformationsquelleAutor Bbb
Ich in der Regel verwenden Sie diese Methode, um zu zeigen, alert und die ich anrufen kann, Wann immer ich brauche.
Es bedeutet, dass ich laufen kann Javascript-code mehrere Male.
Verwendung : Jedes Webform-Klasse, erweitern BasePage wie diese :
Funktionsaufruf :
InformationsquelleAutor toha