2015-05-10 2 views
-1

создать модель множественнойGet DropDownListFor выбранное значение в модели множественной

public class MultipleModel 
{ 
    public Photo Photo { get; set; } 
    public Room Room { get; set; } 
} 

для двух различных моделей:

public class Room 
    { 
     public int Id { get; set; } 
     public string NumberRoom { get; set; } 
     public virtual ICollection<Photo> Photo { get; set; } 
    } 
public class Photo 
    { 
     public int Id { get; set; } 
     public string PhotoName { get; set; } 
     public int Roomid { get; set; } 
     public virtual Room Room { get; set; } 
    } 

По щелчку Submit, на мой взгляд, я хочу загрузить изображение в папку с именем из DropDownListДля выбранного элемента (например,/images/2 /, где 2 = id от DropDownListFor) и добавьте в базу данных. Как я могу правильно отправить выбранный элемент из DropDownListДля использования Html.BeginForm? Мое мнение:

@using Hotel.BusinessObject 
@model MultipleModel 
@using (Html.BeginForm("AddRoomImg", "Admin", 
     FormMethod.Post, new { enctype = "multipart/form-data", id = Model.Room.Id})) 
{ 
    <div>@Html.DropDownListFor(m=> m.Room.Id, ViewBag.roomlist as SelectList, "Select Room")</div> 

    <input type="file" name="img" /> 
    <input type="submit" value="upload" /> 
} 

И мой контроллер, где Room.Id в formCollection всегда = 0 и int? id не работает и вернуть NULL

 public ActionResult AddRoomImg() 
     { 
      ViewBag.roomlist = new SelectList(db.Room, "Id", "NumberRoom"); 
      return View(); 
     } 
     [HttpPost] 
     public ActionResult AddRoomImg(FormCollection formCollection, int? id) 
     { 
      foreach (string item in Request.Files) 
      { 
       HttpPostedFileBase file = Request.Files[item] as HttpPostedFileBase; 
       if (file.ContentLength == 0) 
        continue; 
       if (file.ContentLength > 0) 
       { 
        ImageUpload imageUpload = new ImageUpload { Width = 600 }; 

        ImageResult imageResult = imageUpload.RenameUploadFile(file); 
        if (imageResult.Success) 
        { 
         //TODO: write the filename to the db 
        } 
        else 
        { 
         ViewBag.Error = imageResult.ErrorMessage; 
        } 
       } 
      } 
+0

(1) В) метод 'BeginForm (', 'новый {идентификатор = Model.Room.Id}' добавляет атрибут HTML - его непонятно, что вы пытаетесь сделать с этим (2) Ваш пост подпись метода должна быть 'public ActionResult AddRoomImg (MultipleModel model, HttpPostedFileBase img)' и 'model.Room.Id' будет содержать выбранное значение, а' img' будет содержать файл. (3) Ваш '' не кратен, так почему вы используете цикл foreach? (4) Используйте модель представления, содержащую только те свойства, которые вам нужно отображать/редактировать в представлении. –

ответ

1

Попробуйте

[HttpPost] 
public ActionResult AddRoomImg(MultipleModel model, HttpPostedFileBase img) 
{ 
    //your code here 
} 

или

[HttpPost] 
public ActionResult AddRoomImg(MultipleModel model) 
{ 
    var image = Request.Files(0); //access your images 

    //rest of your code here 
} 
+0

Я не пытаюсь прояснить что-либо, я понимаю, что ОП пытается сделать, и я дал ему ответ. – warheat1990

0

Как ваш вопрос о получении выбранного значения из dropdownListFor в MultipleModel, прежде всего вы должны обновить свои параметры функции.

использовать MultipleModel model, чтобы получить данные формы в модели и HttpPostedFileBase img вместо FormCollection formCollection, чтобы получить файл изображения как объект. попробуйте следующим образом.

[HttpPost] 
public ActionResult AddRoomImg(MultipleModel model, HttpPostedFileBase img) 
{ 
    // To get the selected value from dropdownListFor 
    var selectedRoomId = model.Room.Id; 

    // do what you want to do with img object 
    // you will get img.name in the file object that you can rename 
} 
Смежные вопросы