Verhindern MVC form submit mit Javascript-Funktion
Ich habe eine upload.ascx
in meinem Projekt. Es wird geladen innen Jquery Popup.
Den upload.ascx
enthält File Upload
Kontrolle. Die Datei-upload-Steuerelement uploads .xlsx and .xls
- Dateien. Ich habe Java script
Funktion zu tun, diese überprüfung (Zur Vermeidung von unnötigen Dateien hochgeladen).
Onchange of FileUpload
Kontrolle und Onclick of Submit button
die gleichen Validierungs-Funktion aufgerufen werden.
Den Datei-Upload Validierung Funktion arbeitet für beide anrufen. Wenn der Benutzer klickt auf submit-button die gleiche Funktion wird immer aufgerufen und funktioniert Prima.
Mein Problem ist: In Meinem Validierung Funktion, die ich geschrieben habe return false
. Nach der Anzeige der Warnmeldung, die Seite wird immer umgeleitet, um einige URL (localhost/Admin/Authorization/AcceptFile.aspx
). AcceptFile
ist mein ActionResult Namen. Es sollte nicht passieren. Die Funktion False zurückgeben. Aber die Form wird immer umgeleitet, um Über URL warum.?
Ich habe den debugger in meinen Handlungen Resultieren, die nicht immer genannt, wenn seine falsche Datei(Seiner richtigen). Wenn Ihr die richtige Datei die Index Datei geladen wird, mit Erfolg-Nachricht(Aktion Ergebnis wird immer genannt und funktioniert Prima). .
Ich vermute, MVC-Form. Wenn die falsche Datei hochgeladen die Umleitung geschieht, mit aus aufrufen Aktion Ergebnis dieser gestoppt werden sollte.
<% using (Html.BeginForm("AcceptFile", "Authorization", FormMethod.Post, new { enctype = "multipart/form-data" }))
{%>
Meine Javascript Funktion:
function checkfile(sender) {
var validExts = new Array(".xlsx", ".xls");
var fileExt = sender.value;
var strValue = false;
fileExt = fileExt.substring(fileExt.lastIndexOf('.'));
if (validExts.indexOf(fileExt) < 0) {
ShowMessage(-1, "Invalid file selected, valid files are .xlsx and .xls types.");
strValue = false;
}
else {
strValue = true;
}
return strValue;
}
Meinem upload.ascx-Code:
<div>
<% using (Html.BeginForm("AcceptFile", "Authorization", FormMethod.Post, new { enctype = "multipart/form-data" }))
{%>
<input type="file" id="fileAuthorization" name="fileAuthorization" onchange="checkfile(this);" />
<input type="submit" id="btnSave" name="btnSave" value="Upload" onclick="javascript:return checkfile(document.getElementById('fileAuthorization'))" />
<%} %>
</div>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meiner Selbst, das ich das Problem gefunden.
Ja Mein Verdacht richtig ist. Das Problem ist
diese sollte aufgerufen werden, Wie dies in den Form-tag selbst:
Aber Früher war es genannt-Senden-Schaltfläche Onclick -
Habe ich korrigiert und die immer funktioniert hat(Validations-und Datei-Upload Für die Senden-Schaltfläche Onclick-und Datei-Upload-Steuerelement onchange).
Aber Meine Frage ist, warum die
return false
funktioniert nicht auf "Absenden" button klicken? Aber seine Arbeit für Fileupload onchange-Ereignisse.warum die Umleitung war passiert.? nach der änderung die gleiche Linie zu MVC-Form, die immer gearbeitet (Umleitung ist heutzutage nicht mehr), warum.?
Its my earlier code
. 🙂 Danke, dude., 🙂Ändern Sie Ihre submit zu diesem:
Und es wird nicht senden Sie das Formular automatisch
Wenn Sie bereit sind, das Formular zu senden, können Sie dies tun, mit javascript in Ihre callback-Funktion:
Submit Button to Button
Gesamte Formular Absenden, wird das nicht passieren. In meiner Aktion Ergebnis bekomme ich die Datei-Eigenschaften als null.Da Im MVC-Meine Aktion Ergebnis ich bin mit wie dasHttpPostedFileBase file = Request.Files["fileAuthorization"];
Das MVC-Form Submition ist notwendig für diesen Upload arbeiten.javascript:
imonclick
- Attribut? Und es wahrscheinlich besser/einfacher zu handhaben ist die formsubmit
Veranstaltung statt nur die Schaltfläche. Und es ist wahrscheinlich besser, um Ereignisse zu behandeln, die mit JavaScript anstelle von inline-HTML.HttpPostedFileBase
wird nicht die Datei vom front-end (Web-Seite). Es muss das MVC-Form Submition. Dann wird nur die gebucht Datei hochgeladen wird, durch dieHttpPostedFileBase
.Request.Files.Count is always 0
javascript:
Teil ursprünglich. Immer noch, es wäre keine schlechte Idee, um Ihnen eine bessere Praktiken und/oder versuchen, diesen zu beheben-code; nicht unbedingt gehen in eine Menge von detail