NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: ASP.NET MVC input vs upload metoda

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
ratpile
Člen
Avatar
ratpile:2.4.2016 17:00

Ahoj, mám ještě jeden problémek s ASP.NET MVC

jedná se o upload cesty k obrázku

mám takto controller:

public ActionResult Create(Games games, Entities createEntities, HttpPostedFileBase pictureFile)
       {
           if (ModelState.IsValid)
           {
               var entities = new Entities();

               if (pictureFile != null)
               {
                   var pictureName = Path.GetFileName(pictureFile.FileName);
                   var imagePath = Path.Combine(Server.MapPath("~/App_Data/images/"), pictureName);
                   pictureFile.SaveAs(imagePath);

                   games.Picture = Url.Content("~/App_Data/images/" + pictureName);
               }

               entities.Games.Add(games);
               entities.SaveChanges();
               return RedirectToAction("Index");
           }


           return View(games);
       }

a takto nějak zatím view :

<div class="form-group">
            @Html.LabelFor(model => model.Picture, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">

                                **      <input type="file" id="pictureFile" name="upload" />**

                                        @Html.ValidationMessageFor(model => model.Picture, "", new { @class = "text-danger" })

problém bude zřejmě mezi neexistující vazbou mezi inputem v html a kontrolerem?
jak input nalinkovat na události v nějaké metodě?

díky!

 
Odpovědět
2.4.2016 17:00
Avatar
ratpile
Člen
Avatar
ratpile:3.4.2016 18:00

zkouším něco jako toto, ale nejsme si jistej legitimitou postupu .. :-D prosím o radu

view

 <div class="form-group">
            @Html.LabelFor(model => model.Picture, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">

                                        @*<input type="file" id="pictureFile" name="upload" />*@

                                @using (Html.BeginForm("UploadPicture", "Create", FormMethod.Post, new { enctype = "multipart/form-data" }))
                                {
                                        <input type="file" name="UploadPicture"/>
                                        <input type="submit" name="UploadPicture"/>
                                }

                                        @Html.ValidationMessageFor(model => model.Picture, "", new { @class = "text-danger" })

</div>

controller

[HttpPost]
       [ValidateAntiForgeryToken]
       [Authorize]
       public ActionResult Create(Games games, HttpPostedFileBase uploadPicture)
       {
           if (ModelState.IsValid)
           {
               var entities = new Entities();
               UploadPicture(games, uploadPicture);
               entities.Games.Add(games);
               entities.SaveChanges();

           }

           return RedirectToAction("Index");
       }



       public ActionResult UploadPicture(Games games, HttpPostedFileBase uploadPicture)
       {

           var entities = new Entities();

           if (uploadPicture != null && uploadPicture.ContentLength > 0)
           {
               var pictureName = Path.GetFileName(uploadPicture.FileName);
               string filePath = Path.Combine(Server.MapPath("~/App_Data/images"), pictureName);
               uploadPicture.SaveAs(filePath);
               games.Picture = Url.Content("~/App_Data/images/" + pictureName).ToString();

           }
           return View();
       }
 
Nahoru Odpovědět
3.4.2016 18:00
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na ratpile
vajkuba1234:3.4.2016 19:36

Koukni treba zde

http://www.mikesdotnetting.com/article/259/asp-net-mvc-5-with-ef-6-working-with-files
Nahoru Odpovědět
3.4.2016 19:36
No hope, no future, JUST WAR!
Avatar
ratpile
Člen
Avatar
ratpile:3.4.2016 20:46

nagoogleno mám spoustu, ale asi jsem pitomej a něco mi furt nedochází

nechápu jak pracuje ta HttpPostedFileBase a jak se do té metody UploadPicture dostane nějaký parametr s tím výstupem toho inputu

 
Nahoru Odpovědět
3.4.2016 20:46
Avatar
ratpile
Člen
Avatar
Odpovídá na ratpile
ratpile:3.4.2016 20:48

chápu že tehle řádek

@Html.EditorFor(model => model.Picture, new { htmlAttributes = new { @class = "form-control" } })

nabinduje to textový pole k picture z databáze

jak to ale udělat s inputem nevím a prožívám bouři errorů a vyjímek.. :-D

 
Nahoru Odpovědět
3.4.2016 20:48
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na ratpile
vajkuba1234:3.4.2016 22:33
  1. Pouzivej odpovedet.
  2. Tim, ze ve View jsi pouzil jiste pretizeni Html.BeginForm(), a specifikoval jsi, ze se jedna o soubor, tak bude odeslan do controlleru a tam bude pristupny pod instanci tridy HttpPostedFileBase, tedy uploadPicture.

Snad je to srozumitelne a je to, co jsi hledal. Ostatne je to vysvetleno i v linku, ktery jsem zaslal...

You did this by specifying the type as "file" on an input element. However, this is not enough to ensure that uploaded file data is accessible on the server. You also used one of the longer overloads of the Html.BeginForm helper to add an enctype attribute to the form and sets its value to multipart/form-data. This is an essential step to getting file uploading to work.

Nahoru Odpovědět
3.4.2016 22:33
No hope, no future, JUST WAR!
Avatar
Odpovídá na ratpile
Marian Benčat:4.4.2016 2:34

Zkus koukout sem:

http://www.dotnetportal.cz/…roller-razor

možná ti to něco ohledně bindingu objasní

Nahoru Odpovědět
4.4.2016 2:34
Totalitní admini..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.