Hallo!
Ich habe ein GridView, welches ich mit Daten aus einer Datenbank fülle. Zu jedem dieser Datensätze existiert ein Dokument (PDF, Word oder Excel). Nun habe ich eine zusätzliche Spalte erstellt, in der sich jeweils ein Button befindet, über dem ich dann das jeweilige Dokument öffnen möchte. Mein Ziel ist es nun, wenn man jedes Dokument einmal geöffnet hat, soll ein Button sichtbar werden, um auf die nächste Seite fortfahren zu können.
Hier habe ich mal mein etwas abgespeckten Code des Buttons meiner zusätzlichen Spalte, über den man das Dokument öffnen kann.
protected void btnOpenDokument_Click(object sender, EventArgs e)
{
btnNextPage.Visible = true;
Response.ContentType = "Application/pdf";
Response.AddHeader("content-disposition", "attachment");
string FilePath = @"C:\Users\Admin\Desktop\Test.pdf";
Response.WriteFile(FilePath);
Response.End();
}
Kommentiere ich den Part zum Dokument öffnen aus, so wird der Button (btnNextPage) sichtbar, aber führe ich ihn so aus, wie er oben zu sehen ist, so wird der Button nicht sichtbar. Ich hoffe, ihr könnt mir sagen, warum das so ist und was man evtl. ändern müsste!
Ich danke euch schonmal im Voraus für eure Tipps!
Gruß
Echo
Hallo Echo
Der Code um den Button einzublenden hat gar keine Wirkung, wenn du sowieso ein Response.Clear / .End machst.
Benutze einen HttpHandler dafür und schau dir mal an, was dabei überhaupt passiert.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hallo Peter!
Danke für deine Antwort!
Ich habe mir mal jetzt einen Handler erstellt und schaue jetzt gerade, wie das so alles funktioniert.
HandlerCode:
<%@ WebHandler Language="C#" Class="DocumentHandler" %>
using System;
using System.Web;
public class DocumentHandler :IHttpHandler {
public void ProcessRequest (HttpContext) {
context.Response.ContentType = "text/plain";
context.Response.Write("Dies ist ein Test");
}
public bool IsReusable {
get {
return false;
}
}
}
In der web.config habe ich den Handler folgendermaßen hinzugefügt.
<add verb="*" path="DocumentHandler.ashx" validate="false" type="DocumentHandler" />
Setze ich den Wert von der Eigenschaft "validate" auf true, so bekomme ich beim Starten meiner Seite folgenden Fehler angezeigt:
"Parserfehlermeldung: Der Typ "DocumentHandler" konnte nicht geladen werden."
Was ich auch noch nicht ganz verstanden habe ist, wie ich nun über meinen Button "btnOpenDokument" diesen Handler nun ausführe. Habe bisher nur den Weg gefunden, dass ich auf ihn so zugreifen muss, als wenn ich auf eine neue Seite springen würde. Wobei ich ja auf meiner vorhandenen bleiben möchte und nur den Download-Dialog anzeigen und einen Button (unterm GridView) sichtbar machen möchte.
Gruß
Echo
Hallo Echo
Entweder verwendest du eine ashx-Datei und kein web.config Eintrag, oder eine Klasse und einen web.config Eintrag.
Zu zweiterem: Einfach ein ganz normaler Link, oder ein location.href in einem Button, du musst einfach ein GET-Request anstossen.
Wenn du das gemacht hast und der DownloadHandler die Datei nicht anzeigt, sondern zum herunterladen anbietet, bekommst du auch kein neues Fenster sondern ein Downloaddialog.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hallo Peter!
Ok, dann kann ich ja schonmal den Eintrag in der "web.config" wieder löschen!
Zu zweitem: Wie würdest du das denn regeln mit dem Anzeigen der Dokumente. Der Benutzer muss sich nämlich alle Dokumente die in der Tabelle vorhanden sind mindestens einmal anschauen, um auf die nächste Seite springen zu können? Deswegen ja auch das dynamische einschalten des Buttons
Gruß
Echo
Hallo Echo
Ich würde die Dokumente z.B. in einem Overlay aufgehen lassen (Lightbox bspw.) und dann clientseitig ein Haken bei den schon geöffneten Dokumenten anzeigen.
Wenn alle angeklickt wurden, kannst du ja dann per Javascript das Link / Button.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hallo Peter!
Danke für deinen Tipp! Ich werde mich mal ein wenig darüber schlau machen und meld mich dann evtl. nochmal! 😉
Gruß
Echo