2017-09-23 21 views
0

的模式在实体这样我把HttpPostedFileBase名称为镜像文件我们虚拟的,因为我在实体即时得到实体使用映射输入标签返回NULL INT创建的ActionResult

public class Slider : IEntity 
{ 
     public virtual int Id { get; set; } 

     public virtual HttpPostedFileBase ImageFile { get; set; } 

    } 

这里。镜像文件=空,因此下面的操作代码

[HttpPost] 
     public ActionResult AddOrEdit(Slider entity) 
    { 
     try 
     { 
      string fileName = Path.GetFileNameWithoutExtension(entity.ImageFile.FileName); 
      string extension = Path.GetExtension(entity.ImageFile.FileName); 
      fileName = fileName + DateTime.Now.ToString("yymmssfff") + extension; 
      entity.Image = fileName; 
      fileName = Path.Combine(Server.MapPath("~/Image/"), fileName); 
      entity.ImageFile.SaveAs(fileName); 
      if (ModelState.IsValid) 
      { 
       if (entity.Id == 0) 
       { 

        _sliderService.Insert(entity); 
       } 
在我加入镜像文件名输入标签因此通常我不应该得到空的观点

请帮助

@model Slider 
@{ 

    Layout = null; 
} 

@using (Html.BeginForm("AddOrEdit", "Slider", FormMethod.Post, new { id = 
"form", enctype = "multipart/form-data" , onsubmit = "return 
    SubmitForm(this)" })) 
    { 
     @Html.HiddenFor(m => m.Id) 



    <div class="form-group" style="height:270px;"> 
     @Html.LabelFor(m => m.ImageFile, new { @class = "blue-text", @style = 
     "font-size:16px", @id = "" }) 

    <input name="ImageFile" type="file" /> 

</div> 

<div class="form-group"> 
    <input type="submit" value="Submit" class="btn btn-primary" /> 
    <input type="reset" value="Reset" class="btn" /> 
</div> 

}

回答

0

谢谢你们的帮助,我解决它通过消除 “的onsubmit =” 返回SubmitForm(本)“从Html.BeginForm标记,但在这种情况下,我没有得到验证消息或通知消息任何想法?

下面是的onsubmit

function SubmitForm(form) { 
     $.validator.unobtrusive.parse(form); 
     if ($(form).valid()) { 
      $.ajax({ 
       type: "POST", 
       url: form.action, 
       data: $(form).serialize(), 
       success: function (data) { 
        if (data.success) { 
         Popup.dialog('close'); 
         dataTable.ajax.reload(); 

         $.notify(data.message, { 
          globalPosition: "top center", 
          className: "success" 
         }) 

        } else { 
         Popup.dialog('close'); 

         $.notify(data.message, { 
          globalPosition: "top center", 
          className: "error" 
         }) 
        } 
       } 
      }); 
     } 
     return false; 
    } 
+0

代码我得到的帮助@Pankaj Makwana通过改变Jquery的几行代码来解决这个问题。您可以在下面的链接中找到解决方案。 https://stackoverflow.com/questions/46400029/input-type-file-not-getting-serialized-in-jquery-ajax – Killua

0

为了让你可以改变行动PARAMS像这样的文件:

[HttpPost] 
public ActionResult AddOrEdit(HttpPostedFileBase ImageFile,Slider slider) 
{ 
.... 
} 

而且你需要改变你的实体像这样:

public class Slider : IEntity 
{ 
    public virtual int Id { get; set; } 
    public virtual string ImageUrl { get; set; } 
} 

那么行动里面,你可以这样做:

if (ImageFile!= null) 
     { 
      slider.ImgUrl = SaveImage(ImageFile); 
      db.Slider.Add(slider); 
      db.SaveChanges(); 

     } 

和SaveImage方法:

private string SaveImage(HttpPostedFileBase uploadFile) 
     { 
      if (uploadFile != null && uploadFile.ContentLength > 0) 
      { 
       string relativePath = "~/Image/" + Path.GetFileName(uploadFile.FileName); 
       string physicalPath = Server.MapPath(relativePath); 
       uploadFile.SaveAs(physicalPath); 
       return uploadFile.FileName; 
      } 
      return null; 
     }