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
Datei-upload in MVC verwendet, wenn in der bootstrap-modal null zurück

Wenn mit seitlichem Blick Direkt
Datei-upload in MVC verwendet, wenn in der bootstrap-modal null zurück

Ü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

Datei-upload in MVC verwendet, wenn in der bootstrap-modal null zurück

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??

Ich bin mit dem gleichen Thema würden Sie gerne die Lösung posten, wenn du die Lösung zu erhalten .
Was ist die Lösung?

InformationsquelleAutor Krishna Thota | 2014-10-25

Schreibe einen Kommentar