2013-10-09 3 views
0

Я начал работать с MVC4 + EF и столкнулся с проблемой с загрузкой изображения: Я хочу, чтобы сохранить путь изображения к БД, но фактический файл ~/App_Data/Передача несколько объектов в контроллер MVC

Мне нужно передать «HttpPostedFileBase» и мой пользовательский «Image» объектов для «Create». Я создал класс «ImageUpload» для передачи обоих объектов.

"Image" Класс:

public class Image 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Path { get; set; } 
    public int DepartmentId { get; set; } 
} 

"ImageUpload" Класс:

public class ImageUpload 
{ 
    public Image image { get; set; } 
    public HttpPostedFileBase file { get; set; } 
} 

Вид:

@model MvcBannikov.Models.ImageUpload 

    @using (Html.BeginForm("Create", "Image", FormMethod.Post, new { enctype = "multipart/form-data" })) 
    { 
     @Html.ValidationSummary(true) 

     <fieldset> 
      <legend>New Photo</legend> 

      <div class="editor-label"> 
       <p>Name:</p> 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.image.Name) 
       @Html.ValidationMessageFor(model => model.image.Name) 
      </div> 

      <div class="editor-label"> 
       <p>Path:</p> 
      </div> 
      <div class="editor-field"> 
       @Html.TextBoxFor(model => model.file, new { type = "file" }) 
       @Html.ValidationMessageFor(model => model.file) 
      </div> 

      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 
    } 

"Create" метод:

[HttpPost] 
public ActionResult Create(ImageUpload image) 
{ 
    ...................... 
} 

Проблема заключается в том, что ImageUpload объекта NULL: (((

Причина, почему мне нужен файл и класс изображения является то, что класс изображения имеет ID Department - мне нужно что id.

Возможно, вы знаете другое решение, как я могу передать DepartmentId вместе с файлом?

Спасибо за помощь

ответ

0

Создайте еще один дополнительный слой, сделать его ViewModel. Вместо этого класса созданы все поля, которые нужно обработать, например: класс изображения и т.д. И присвоить этот ViewModel вашему взору, как «модель» вашей MVC в

PS это решение только дает представление о том, как работать с несколькими моделями одновременно. Однако это не распространяется на правильность ваших моделей

+0

Благодарим за сообщение. Класс My ImageUpload был создан как ViewModel, и я думаю, что понимаю основную идею, но она не работает с кодом, который я создал. Я создал строго типизированный вид этого действия «Создать», но в любом случае это NULL. Может быть, проблема в моем представлении? – user1274184

0

Попробуйте это, просто измените свой контроллер, чтобы использовать только вашу Image модель и получить файл с Request объекта

Контроллер:

[HttpPost] 
public ActionResult Create(Image image) 
{ 
    HttpPostedFileBase myFile = Request.Files["file"]; 
    ...................... 
} 

Не проверял код, но я помню, как это делал один раз.

+0

Спасибо за ответ, но в этом случае myFile имеет значение NULL. Однако ваш ответ помог мне. Я могу получить идентификатор отдела от Uri uri = Request.Url; uri в этом случае == http: // localhost: 18388/Image/Create? DepartmentId = 3 Я могу разобрать эту строку, но что-то говорит мне, что это «плохой» подход или нет? – user1274184

+0

Спасибо, это работает для меня. Я добавил HiddenFor для идентификатора отдела и теперь получаю результаты – user1274184

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