Nie mogę odczytać danych z formularza w mvc4

0

Hej, od niedawna staram się coś robić w asp.net mvc 4, mam teraz problem z odczytaniem obiektu który powinien zostać przesłany przez formularz. Chcę zrobić coś w stylu galerii zdjęć z możliwością ich komentowania. mam taki model:

 
public class Picture
    {
        public int Id { get; set; }
        public string Author { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string Extension { get; set; }
        public virtual List<Coment> Coments { get; set; }
    }

    public class Coment
    {
        public int Id { get; set; }
        public string Author { get; set; }
        public string Content { get; set; }
        public DateTime Date { get; set; }
    }

W kontrolerze za dodawanie zdjęć mają odpowiadać te 2 metody

 
[HttpGet]
        public ActionResult AddPicture()
        {
            return View();
        }

        [HttpPost]
        public ActionResult AddPicture(Picture picture)
        {
            HttpPostedFileBase Picture = Request.Files["Picture"];
            if (Picture != null)
            {
                string name = Picture.FileName;
                string extension = name.Substring(name.LastIndexOf('.'));
                Picture.SaveAs(@"C:\Users\Adam\Documents\Visual Studio 2012\Projects\YourPictures\YourPictures.WebUI\Pictures\" + picture.Name + "_" + picture.Id + extension);

                picture.Extension = extension;
            }

            repository.AddPicture(picture);
            TempData["message"] = String.Format("Picture was succesfuly added");

            return RedirectToAction("Index");
        }

Widok dla AddPicture() :

@model YourPictures.Domain.Entities.Picture

@{
    ViewBag.Title = "AddPicture";
}

<h2>AddPicture</h2>

@using (Html.BeginForm("AddPicture", "Pictures", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <p>Author Name @Html.EditorFor(x=>x.Author)</p>
    <p>Picture Name @Html.EditorFor(x=>x.Name)</p>
    <p>Description @Html.EditorFor(x=>x.Description)</p>
    <p>Image Source <input type="file" name="Picture" /> </p>
    
    <input type="submit" value="Add new picture" />
}
 

Ustawiam breakpoint w metodzie

public ActionResult AddPicture(Picture picture) 

i sprawdzam jak wygląda argument picture, za każdym razem jest null. Wie ktoś co może być przyczyną? Pozdrawiam

0

Zrob w akcji:

public ActionResult Akcja(HttpPostedFileBase pic) {
  if(ModelState.IsValid && pic != null) {
    // ...
  }
}

I w formularzu:

@using(Html.BeginForm("Akcja", "blabla", FormMethod.Post, new { enctype = "multipart/form-data" })) {
  // ...
}
0

Już mi to działa. Problem był chyba w tym że plik który pobierałem od użytkownika miał nazwę Picture, czyli tak samo jak obiekt który jest modelem, ponieważ zmiana nazwy pliku z Picture na Picture2 sprawiła że wszystko działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1