Kendo-Upload-Steuerelement, Übergeben von benutzerdefinierten Fehlermeldung zurück anzeigen
Arbeite ich mit ASP.NET MVC3, Kendo UI und Jquery. Ich bin versucht, übergeben Sie eine Fehler-Nachricht zurück zu der Ansicht, wenn die Verarbeitung einer hochgeladenen Datei nicht passieren Validierung Regeln, die wir haben.
Hier ist meine upload-Steuerelement aus meiner Sicht:
@(Html.Kendo().Upload()
.Name("files")
.Async(a => a
.Save("SaveForm", "Home")
.Remove("RemoveForm", "Home")
.AutoUpload(true))
.Events(events => events
.Success("onSuccess")
.Error("onUploadError")
.Select("onSelect")
))
Hier sind die relevanten Teile des SaveForm Methode im controller:
try
{
FieldDefinitions = ProcessPDFFile(file.FileName);
}
catch (InvalidDataException ex){
List<String> errors = new List<String>();
errors.Add(ex.Message);
Response.StatusCode = 500;
Response.TrySkipIisCustomErrors = true;
//return Json(new { success = false, statusText = "error error" }, "text/plain");
//ModelState.AddModelError("pp", ex.Message);
//var result = ModelState.ToDataSourceResult();
//return Json(errors, JsonRequestBehavior.AllowGet);
//return Json(new { status = "OK" }, "text/plain");
//return Json(String.Concat(errors.ToArray()));
//return Json(new AjaxResult(false, ex.Message, errors ));
}
Hier mein Jquery error-Funktion:
function onUploadError(e)
{
alert(e.message);
}
In meinem controller, ex.Nachricht ist eine benutzerdefinierte Fehlermeldung aus und ich will es pass zurück in die Ansicht für die Anzeige. Sie können sehen, all die verschiedenen Varianten, die ich versucht, übergeben Sie es zurück, indem man die auskommentierten Zeilen code in meinen controller.
Den jquery-Fehler-Funktion wird immer ausgeführt. Das problem ist nur, ich kann nicht scheinen, um meine benutzerdefinierte Fehlermeldung in der jquery.
Beim auswerten e.XMLHTTPRequest
es hat folgenden Wortlaut:
responseText = "Error trying to get server response"
Status = 500
StatusText = "error"
So, wie bekomme ich meine benutzerdefinierte Fehlermeldung in einem der oben genannten Elemente des XMLHTTPRequest? Ich nehme an, die Rendite auf mein controller muss geändert werden, irgendwie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung ist einfach, sobald Sie es sehen, aber die Dokumentation auf dieser ist noch nicht abgeschlossen. Wir wissen, dass wir, sollte eine leere Zeichenfolge zurückgeben, um zu signalisieren Erfolg. Ich habe auch gesehen, – aber nicht finden können, jetzt – docs, die Sie vorschlagen, könnte alternativ wieder eine JSON-Objekt statt string.Leer, und würde dies auch bedeuten Erfolg. Alles andere als JSON-Objekt oder einen string.Leer bedeutet einen Fehler. Aber wie wollen wir damit umgehen?
Dem argument geschickt, um die Error-Ereignis-handler hat immer noch die grundlegenden Komponenten: e.Dateien, e.Betrieb, und e.XMLHttpRequest. Die Lösung ist, um wieder eine normale string-in einer controller-Methode, und es wird die rohen XMLHttpRequest.responseText. Es ist nicht als JSON, so versuchen Sie nicht zu analysieren als JSON.
Controller:
JavaScript-handler:
e.preventDefault()
hat nicht funktioniert.e.stopPropagation()
könnte die richtige Reaktion statt. Allerdings würde ich nur versuchen, indemreturn false
am Ende Ihrer benutzerdefinierten Fehler-Funktion, wie es behandelt beide stopPropagation und preventDefault. Könnten Sie versuchen, beide um zu sehen, was funktioniert.Zu handhaben, da eine ungültige hochladen, hatte zum ändern der http-return-code.
In der catch-Klausel:
Sfuqua Antwort (vielen Dank!) geklärt und für mich arbeiten:
In diesem Fall, onUploadSuccess() wurde nicht ausgelöst.