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