2015-11-08 3 views
1

Я загружаю файл, используя asp.net mvc с обязательной загрузкой файла, но не могу загрузить файл с помощью этого. Как сделать загрузку файлов необходимой для проверки с помощью ASP.NET MVC?Как сделать загрузку файлов в asp.net mvc?

Вот мой код класса модели.

public class Slider 
    { 
     public int SliderId { get; set; } 

     [Required] 
     public string Title { get; set; } 
     [Required] 
     public string FileURL { get; set; } 

    } 

Вот мой Создание контроллера:

[HttpPost] 
[ValidateAntiForgeryToken] 
[ValidateInput(false)] 
public ActionResult Create([Bind(Include = "SliderId,Title,FileURL")] HttpPostedFileBase file, Slider slider) 
{ 
    if (ModelState.IsValid) 
    { 

     if (file != null) 
     { 
      string fil = System.IO.Path.GetFileName(file.FileName); 
      string path = System.IO.Path.Combine(Server.MapPath("~/Content/Uploads/Slider/"), fil); 
      file.SaveAs(path); 
      slider.FileURL = "/Content/Uploads/Slider/" + file.FileName; 
     }    

     db.Sliders.Add(slider); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return View(slider); 
} 

Вот мой Вид:

@model Test.Models.Slider 

@{ 
    ViewBag.Title = "Create"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 



@using (Html.BeginForm("Create", "SliderManager", FormMethod.Post, new { enctype = "multipart/Form-data" })) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <h2>Create</h2> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.Title,"Title*", htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-2"> 
       <label for="file">Upload Image for Slide*:</label> 
      </div> 
      <div class="col-md-10"> 
       <input type="file" name="file" id="file" style="width:50%" /> 

      </div> 

     </div> 
      <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Save" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 


@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 
+0

Посмотрите на это. http://stackoverflow.com/questions/6388812/how-to-validate-uploaded-file-in-asp-net-mvc – Chandru

+0

У вас нет кода, который проверяет загружаемый файл, единственная часть, которую вы имеете, если файл присутствует , Так что добавьте проверку, если файл не существует, добавьте ошибку проверки, и это приведет к сбою в вашем представлении – cpoDesign

+0

@cpoDesign. Как проверить, загружен ли файл над кодом выше? – ctest

ответ

2

Изменения сделать

1-я модель

public class Slider 
{ 
    public int SliderId { get; set; } 

    [Required] 
    public string Title { get; set; } 

    public string FileURL { get; set; } 
} 

Удалены требуется файл Url как это не исходит от пользователя, но вы должны заселять его

второе Загрузить действие

[HttpPost] 
    [ValidateAntiForgeryToken] 
    [ValidateInput(false)] 
    public ActionResult Create(HttpPostedFileBase file, Slider slider) 
    { 
     //Add validation if file is not present and fail model 
     if (file == null) 
     { 
      ModelState.AddModelError("FileURL", "Please upload file"); 
     } 

     if (ModelState.IsValid) 
     { 

      if (file != null) 
      { 
       string fil = System.IO.Path.GetFileName(file.FileName); 
       string path = System.IO.Path.Combine(Server.MapPath("~/Content/Uploads/Slider/"), fil); 
       file.SaveAs(path); 
       slider.FileURL = "/Content/Uploads/Slider/" + file.FileName; 
      } 

      //db.Sliders.Add(slider); 
      //db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View("~/Views/Home/Index.cshtml", slider); 
     //return View(slider); 
    } 

Кроме того, я не знаю, почему вы указали дополнительные привязки, но я думаю, вы была какая-то причина для этого

3 мнение,

@using (Html.BeginForm("Create", "Home", FormMethod.Post, new { enctype = "multipart/Form-data" })) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <h2>Create</h2> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.Title, "Title*", htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-2"> 
       <label for="file">Upload Image for Slide*:</label> 
      </div> 
      <div class="col-md-10"> 
       <input type="file" name="file" id="file" style="width:50%" /> 
       @Html.ValidationMessageFor(x=>x.FileURL) 
      </div> 

     </div> 
     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Save" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
    } 

Я добавил сообщение проверки. Конечно, это сообщение проверки может иметь свое собственное свойство, и я бы изменил его, чтобы он соответствовал вашей бизнес-логике.

<input type="file" name="file" id="file" style="width:50%" /> 
      @Html.ValidationMessageFor(x=>x.FileURL) 
+0

Спасибо ... Он работает – ctest

+0

Отлично! Именно то, что мне нужно. – godfathr

Смежные вопросы