dimanche 10 mai 2015

Get DropDownListFor selected value in multiple model

I create multiple model

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

for two different models:

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; }
    }

On click Submit in my view i want upload image to the folder with the name from DropDownListFor selected item ( for example /images/2/, where 2=id from DropDownListFor) and add to database. How i can correctly send selected item from DropDownListFor using Html.BeginForm? My view:

@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" />
}

And my controller, where Room.Id in formCollection is always=0 and int? id not works and return 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;
                    }
                }
            }

Aucun commentaire:

Enregistrer un commentaire