Mithilfe einer input type=Datei ohne Formular

Das problem, das ich habe, ist immer die Datei-Informationen von einem <input type=file>, ohne die Verwendung eines <form> in eine code-behind-Methode. Die Datei wird immer als null in der code-behind-wenn ich versuche, die Informationen erhalten, die mit Request.Files und ich glaube, das ist, weil es eigentlich nie an den server gesendet werden.

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 <form>, 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 <input type=file> statt der <asp:FileUpload>, so dass ich Zugriff auf die 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 die enctype="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!

InformationsquelleAutor Christine | 2012-08-22
Schreibe einen Kommentar