JQuery Ajax Formulaire avec envoi de Fichier ne fonctionne pas sous IE
Je suis en utilisant Jquery Ajax Formulaire de télécharger des fichiers, qui fonctionne bien dans Chrome et Firefox, mais il ne marche pas sous IE. Il pop-ups, une fenêtre me disant enregistrer le fichier que je suis en train de télécharger.
Voici un exemple de mon code, si nécessaire, le rite est ici:
HTML:
<div class="addNewDocumentContent">
<form id="AddNewDocForm" action="@Url.Action("AddNewDocument", "BidForm")" enctype="multipart/form-data" method="post">
<div>
<input name="File" type="file" style="width: 80%;" />
</div>
<div>
<label>
@Labels.Name</label>
<input type="text" name="Name" style="width: 80%;" />
</div>
<div style="text-align: right;">
<button type="button" name="Back" value="Back">
@Buttons.GoBack
</button>
<button type="submit" name="Add" value="Back">
@Buttons.Add
</button>
</div>
</form>
JS:
//Document Ready=============================================================================
$(function () {
$('#AddNewDocForm').ajaxForm({
type: 'POST',
beforeSubmit: function () {
return $("#AddNewDocForm").valid();
},
success: function (documents) {
FillDocuments(documents);
$('#dialogAddNewDocument').dialog('close');
}
});
});
//Validate====================================================================================
//Validation=====================================================================================
$(function () {
$("#AddNewDocForm").validate({
ignore: ":not(:visible)",
rules: {
File: "required",
Name: "required"
}
});
});
//=========================================================================================
Action
[HttpPost]
public JsonResult AddNewDocument(DocumentModel document)
{
if (ModelState.IsValid)
{
List<DocumentModel> documents = null;
if (Session["Documents"] != null)
{
documents = (List<DocumentModel>)Session["Documents"];
var doc = documents.OrderByDescending(x => x.Number).Take(1).FirstOrDefault();
document.Number = doc != null ? doc.Number + 1 : 1;
document.FileName = document.File != null ? document.File.FileName : document.FileName;
documents.Add(document);
}
else
{
documents = new List<DocumentModel>();
document.Number = 1;
document.FileName = document.File != null ? document.File.FileName : document.FileName;
documents.Add(document);
Session["Documents"] = documents;
}
var displaydocs = documents.Select(x => new
{
Name = x.Name,
Number = x.Number,
File = x.File != null ? x.File.FileName : x.FileName,
Route = x.Route != null ? x.Route : "#",
});
return Json(displaydocs, JsonRequestBehavior.AllowGet);
}
else
{
return null;
}
}
et enfin modèle:
public class DocumentModel
{
public int Number { get; set; }
[Required]
public string Name { get; set; }
[Required]
public HttpPostedFileBase File { get; set; }
public string FileName { get; set; }
public string Route { get; set; }
}
Encore une fois, il fonctionne dans tous les navigateurs sauf IE8. Im probablement pas le seul, mais je nai pas trouvé de réponse.
OriginalL'auteur Morgan Soren | 2012-06-27
Vous devez vous connecter pour publier un commentaire.
Cette question a été demandé de nombreuses fois. Merci de faire une recherche avant de poster. Le la documentation etats clairement:
Puisque vous êtes de retour JSON à partir de votre contrôleur de l'action, vous devez respecter ce que dit la documentation => enveloppez-les dans un
<textarea>
élément.OriginalL'auteur Darin Dimitrov
Je n'ai pas essayé avec un textarea, mais il fonctionne très bien si je définir le type de contenu pour revenir à l'intérieur de l'action en tant que text/html:
OriginalL'auteur Morgan Soren
Essayez d'ajouter de la mémoire cache:'false' à l'intérieur de votre appel AJAX...
Quelque chose comme:
OriginalL'auteur Dejo Dekic