Mithilfe einer input type=Datei ohne Formular
Das problem, das ich habe, ist immer die Datei-Informationen von einem
, ohne die Verwendung eines <input type=file>
in eine code-behind-Methode. Die Datei wird immer als null in der code-behind-wenn ich versuche, die Informationen erhalten, die mit <form>
und ich glaube, das ist, weil es eigentlich nie an den server gesendet werden. Request.Files
Gibt es trotzdem, um die Datei-Informationen an den server gesendet, ohne die Verwendung eines
? <form>
Hier ist der html-ich bin mit
<input type="file" id="upload_file" name="upload_file" runat="server" accept="image/*" onchange="copyFile()" />
- Und das ist der code hinter
HttpPostedFile file = Request.Files["upload_file"];
if (file != null && file.ContentLength > 0)
{
string fname = Path.GetFileName(file.FileName);
file.SaveAs(Server.MapPath(Path.Combine("~/App_Data/", fname)));
}
Ich nicht verwenden können, eine
, die aufgrund der Art, wie die Webseite aufgebaut, es verursacht einige schreckliche Probleme mit der Formatierung in nur IE (auch IE9), dass ich nicht fix in css. Auch ich bin mit <form>
statt der <input type=file>
, so dass ich Zugriff auf die <asp:FileUpload>
onchange
Veranstaltung.
Bearbeiten!
Auf einer masterpage begraben innerhalb der Webseite ist ein Formular, welches bereits das runat ="server" Hinzugefügt. Sorry für nicht zu erwähnen, das früher, ich habe gerade herausgefunden, wenn Sie versuchen, um runat="server", um die neue form, die ich versuche zu erstellen
Jede Hilfe wäre sehr geschätzt werden! Danke!
BEARBEITEN!
Endgültige Code
Danke an Euch beide @bkwint und @TrizZz, ohne deine Hilfe würde ich immer noch versuchen, um dies herauszufinden.
Den html-Teil
<asp:FileUpload id="upload_file" runat="server" OnLoad="upload_file_OnLoad" />
den code fügen Sie in das onchange des asp:FileUpload
protected void upload_file_OnLoad(object sender, EventArgs e)
{
((System.Web.UI.WebControls.FileUpload)sender).Attributes.Add("onchange", "copyFile();");
}
und die code-behind-Datei speichern
if (Request.Files.Count > 0)
{
if (Request.Files[0].FileName.Length > 0)
{
Request.Files[0].SaveAs("~/App_Data/" + Request.Files[0].FileName);
}
}
Das javascript, das ermöglicht es mir, um das Formular zu verwenden in der master-Seite für das senden mit dem onchange, das wurde Hinzugefügt, um die asp:FileUpload. Die id 'aspnetForm' ist die form, in der master-Seite.
document.getElementById('aspnetForm').submit();
Von dem, was ich gelernt habe, durch mehr Forschung ist, dass das, was wahrscheinlich verursacht die css, unglücklich zu sein und das Formular nicht Einreichen, richtig war, weil verschachtelte Formen sind schlecht. Da gab es eine form, die ich hatte keine Ahnung, wie das auf der master-Seite, wenn ich fügte hinzu, eine andere form, die web-Seite nur ignoriert die, die ich Hinzugefügt. Durch den Aufruf der submit auf der master-Seite, die Datei, die hochgeladen wird, wird korrekt auf den server übertragen.
Danke nochmal an alle die geantwortet/kommentiert und geholfen!
HINWEIS
Dies kann nicht im IE funktioniert, je nachdem, wie Sie es eingerichtet haben. IE mag es nicht, wenn Sie versuchen, senden Sie ein Formular direkt aus dem fileupload.
- Sie sind mit ungültigen HTML ein input-element muss geschachtelte in einem
form
. - "es bewirkt, dass einige Probleme mit der Formatierung [ ... ], dass ich nicht fix in css", Als diese Frage sollte eine CSS Frage...
- Sie müssen ein Formular verwenden. Was die Formatierung Probleme, die Sie gegenüberstellen, können Sie Sie lösen mit CSS.
- Es gibt keine solche Forderung in keiner HTML-Spezifikation. Formular-Steuerelemente außerhalb der Formen sind nur nutzlos, ohne JavaScript (die gegen best Practice)
- und feela, die ich versucht habe zu beheben, die Probleme mit der Formatierung vor und haben sogar gefragt, ob anderen web-Entwickler zu helfen, aber wir waren beide nicht. Das ist, warum ich war neugierig, ob es möglich war, dies zu tun, ohne ein <form>
- dann Sie haben zu tun, es mit JavaScript. JQuery AJAX vielleicht. Sie müssen manuell extrahieren Sie die Daten aus der Eingabe und Stopfen Sie in eine Anfrage. Es sei denn, Ihr framework bietet solche Funktionen. Ich bin nicht wirklich vertraut mit .NET
- Danke für die Ideen!
- Sie können swfupload oder versuchen, html5-Datei-api wie auf diesem Beispiel: timothypoon.com/blog/2011/05/10/..., aber es wird nicht funktionieren auf IE
- Stellen Sie sicher, dass Ihre
<form>
umfasst dieenctype="multipart/form-data"
Attribut - obwohl ich glaube, ASP.NET sollten Sie als standard, wenn ein Datei-upload-Steuerelement verwendet wird - Vielen Dank für die Idee und den link!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie ein Formular zu verwenden, Formular-Steuerelemente.. ich weiß, Sie sagten, Sie haben einige CSS-Probleme, aber werden Sie in der Lage, mit Ihnen zu behandeln css dann, wenn es zu Problemen führen.
HttmpPostedFile ist nur post auf "Absenden", das ist, warum Sie bekommen eine NULL-Datei. Form ist nötig, um der post-Methode. Datei senden nur während des post, werden Sie brauchen, um dies zu tun:
Und im load-Ereignis des yourPage.aspx:
Mit dieser Methode, sollten Sie keine Probleme haben, außer für CSS natürlich
Sie Datei-Eingabe platziert werden soll in einem Formular. Soweit ich informiert bin gibt es keinen Weg, um es aus einer form-tag und immer noch die Daten senden....
Soweit der Grund für die Verwendung der tag-an Stelle des dot-net-FileUpload-tag. Warum gehst du nicht einfach ad das onchange-javascript im backend.
So definieren Sie Ihren tag wie diese
und definieren Sie Ihre code-behind-wie dies
code
<form method="post" enctype="multipart/form-data">code
. Haben Sie irgendwelche Ideen, warum?