Datei-upload in MVC verwendet, wenn in der bootstrap-modal null zurück
Ich versuche Bilder hochzuladen, um meine Anwendung, aber es gibt immer den Wert null. Ich bin nicht in der Lage zu finden die Ausgabe hier. Können Sie mir helfen? Hier ist mein code.
Modell
[Table("Slider")]
public partial class Slider : BaseModel
{
[Required]
[StringLength(200)]
public string FileName { get; set; }
[StringLength(200)]
public string Title { get; set; }
[StringLength(1000)]
public string Description { get; set; }
public int? Order { get; set; }
}
[NotMapped]
public class SliderImage : Slider
{
public HttpPostedFileBase ImageFile { get; set; }
}
Ansicht
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="modal-body">
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Id)
<div class="form-group">
@Html.LabelFor(model => model.FileName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(model => model.FileName, new { @class = "form-control", @readonly = "readonly" })
@Html.ValidationMessageFor(model => model.FileName, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.ImageFile, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.ImageFile, new { @class = "form-control", type = "file" })
//This is Same as below
//<input class="form-control" id="ImageFile" name="ImageFile" type="file" value="">
</div>
</div>
Controller
public ActionResult Edit(int id)
{
Slider slider = _db.Sliders.Find(id);
if (slider == null)
{
return HttpNotFound();
}
Mapper.CreateMap<Slider, SliderImage>();
SliderImage sliderImage = Mapper.Map<Slider, SliderImage>(slider);
return PartialView("_Edit", sliderImage);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult EditSlider([Bind(Include = "Id,FileName,Title,Description,Order,IsActive,Name,ImageFile")] SliderImage sliderImage)
{
if (ModelState.IsValid)
{
Mapper.CreateMap<SliderImage, Slider>();
Slider slider = Mapper.Map<SliderImage, Slider>(sliderImage);
_db.Entry(slider).State = EntityState.Modified;
_db.SaveChanges();
return Json(new { success = true });
}
return PartialView("_EditSlider");
}
Was mache ich falsch, bin ich das?
Gefunden Das Problem
Ich bin verbindlich, die teilweise den Blick ins innere der bootstrap-modal-popup. Wenn ich hochladen im popup-Menü der upload-null zurückgeben. Stattdessen, wenn ich öffnen Sie die partielle Ansicht direkt im browser, dann wird die Datei vorhanden ist, in das Modell. So ist es kein problem mit Datei-upload. Das problem ist, modales popup, oder sowas.
Bei der Verwendung von Bootstrap-Modell
Wenn mit seitlichem Blick Direkt
Überprüfen Sie die Gefundene Unterschied bei der Verwendung von fiddler zwischen dem Bootstrap-Modal Einreichen und Mit dem partial View Direkt in der folgenden Abbildung jeweils
Beim buchen aus dem modales popup, das der content type geändert application/x-www-form-urlencoded
wo, wie bei der Verwendung des partial view direkt ist es multipart/form-data
Fand das root-Problem.
$('form', dialog).submit(function () {
var $form = $(this);
var enctype = $form.attr('id');
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
if (result.success) {
$('#myModal').modal('hide');
//Refresh
location.reload();
} else {
$('#myModalContent').html(result);
bindForm();
}
}
});
return false;
});
Ich bin mit AJAX Veröffentlichung zu übermitteln, die Daten aus meinem Formular. Bei der Verwendung von $(this).serialize()
die ajax-Erfolge genannt wird, aber die Datei wird nicht zurück, wie Sie den content-Typ ist anders. Wie kann ich dies ändern??
Was ist die Lösung?
InformationsquelleAutor Krishna Thota | 2014-10-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich denke, Ihr Aktuelles Problem bezieht sich auf die Standard-Einstellungen für den jQuery.ajax-Methode. Standardmäßig ist der content-type für den jQuery.ajax () - Methode ist
'application/x-www-form-urlencoded; charset=UTF-8'
. Also, in einem Beispielprojekt, ich veränderte Ihre javascript-Funktion angeben, die contentType-als Parameter an die ajax-Methode:contentType: this.enctype
Ich denke, es kann auch ein paar zusätzliche Probleme. Das nächste Problem, dass mir aufgefallen ist, dass bei der Vorlage, ich war die Verbindung zu anderen Aktionen, so dass ich aktualisiert wird diese Zeile in der Ansicht:
:
Schließlich, wenn die ajax eingereicht, und ich wurde umgeleitet, um die eingeschränkte Sicht. Ich glaube, dies kann behoben werden, durch hinzufügen von " preventDefault an die ajax-Funktion:
Dies ist, wie ich war in der Lage, dieses Beispiel funktioniert in einem Beispiel-Projekt; bitte posten Sie ein update, falls Sie noch zusätzliche Fragen stellen.
InformationsquelleAutor jennyfofenny
In der Regel, modale pop-ups gerendert werden am Ende der
body
. Ich bin mir ziemlich sicher, dass bootstrap nicht die gleiche Sache. Dies wiederum bedeutet, dass der Inhalt des modal wird an einen neuen Speicherort verschoben und ist Ihrform
element. Ich würde empfehlen, eine Neuordnung: bewegen Sie denform
innerhalb der modalen Fenster:Damit verschieben Sie das gesamte Formular (und nicht nur die form der Elemente), wenn das modale gebaut wird.
InformationsquelleAutor Andrei V
Nur die Datei, die hochgeladen null zurück? oder das andere Textfeld null zurück?
@Andrei Kommentare, in der Regel die modals ist an einen neuen Speicherort verschoben und die form ist nicht vorhanden oder Ihr partialview verschoben werden könnte, um die modale funktioniert.
Mit jqueryUI ich hatte ein ähnliches problem. Ich konnte Sie nicht finden, Ihre Frage, wenn Sie mit ajax übermitteln Ihre Daten, die Sie nutzen könnten .ajax() senden Sie Ihre form und sehen, ob das Bild auch hochladen
Wenn Sie nicht möchten, verwenden Sie $.ajax(), könnten Sie versuchen, zu verwenden .appendTo() mit jquery, wickeln Sie alles, was Sie in Ihrem Formular in ein div mit einer ID, dann, nachdem Sie alle Ihre Daten versuchen zu sepecify, dass Sie wollen, appendTo("#YourFormID") auf eine Schaltfläche klicken, oder, wie Sie möchten. Diese Arbeit ist für mich, wenn ich mit modal, hoffe es hilft dir etwas. Viel Glück
InformationsquelleAutor Jorge F
Wenn ich verstehe, dass Sie das Formular in einer teilweisen Ansicht und teilweise in einem modalen popup, es ist das richtige.
1) stellen Sie ein Modell für die in der form verwendet, in dem alle Elemente für die form,
2) erklären Sie das Modell in der ersten Zeile in der Teilansicht
3) übergeben Sie als parameter das Modell der post-Funktion.
4) verwenden Sie eine Teilweise Ansicht, gut möglich ist, verwenden Sie diese Ansicht in verschiedenen Seiten, Sie müssen angeben, die Kontrolle zu treatement form. in code:
MODELL
ANSICHT
CONTROLLER
Sie machen zwei Modelle: public partial class Slider : BaseModel und Klasse SliderImage : Regler, mache ich auch nur, slidermodel; in view I writre die gesamte Teilansicht, benötigt schreiben @model und action="/YOURCONTROLLERNAME/EditSlider" in der Teilansicht. die parameter in der Steuerung ist (SliderModel obj) auch dieser kleine Unterschiede sind das problem
InformationsquelleAutor Pablote
Ich glaube, ich habe in der Lage zu erkennen Ihr problem, die Ajax nicht unterstützt Datei-Serialisierung verwenden, sollten Sie die folgende Methode in das Skript:
InformationsquelleAutor Márcio Douglas
Versuchen mit folgenden Weise dieser arbeitete für mich :
ANZEIGEN :
Controller :
Lass es mich wissen.
InformationsquelleAutor Ganesh Todkar