Sto tentando di caricare immagini nella mia applicazione ma restituisce sempre null. Non riesco a trovare il problema qui. Mi puoi aiutare? Ecco il mio codice.Caricamento file in MVC quando utilizzato nei ritorni modali bootstrap null
Modello
[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; }
}
View
@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");
}
Cosa sto sbagliando io questo?
stato rilevato il problema
sto vincolante la vista parziale all'interno del popup modale bootstrap. Quando carico dal popup, il caricamento restituisce null. Invece se apro la vista parziale direttamente nel browser, il file è presente nel modello. Quindi non c'è nessun problema con il caricamento di file. Il problema è con popup modale o qualcosa del genere.
quando si utilizza Bootstrap modello
Quando si utilizza parziale vista Directy
Controllare la differenza trovata quando si utilizza violinista tra il Bootstrap modale Invia e Utilizzando la vista parziale Direttamente nella figura seguente, rispettivamente
Durante la pubblicazione dal modale cucciolo, il tipo di contenuto viene modificato application/x-www-form-urlencoded
dove come quando si utilizza la vista parziale direttamente spetta multipart/form-data
individuato il problema principale.
$('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;
});
sto usando AJAX annuncio a inviare i dati dalla mia forma. Quando si utilizza $(this).serialize()
viene chiamato il successo ajax ma il file non viene restituito in quanto il tipo di contenuto è diverso. Come posso cambiare questo ??
Sto affrontando lo stesso problema ti piacerebbe pubblicare il soluzione se si ottiene la soluzione. –
Qual è la soluzione? –