Avatar
ratpile
Člen
Avatar
ratpile:

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. dubna 17:00
Avatar
ratpile
Člen
Avatar
ratpile:

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. dubna 18:00
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na ratpile
vajkuba1234:

Koukni treba zde

http://www.mikesdotnetting.com/article/259/asp-net-mvc-5-with-ef-6-working-with-files
Nahoru Odpovědět 3. dubna 19:36
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
ratpile
Člen
Avatar
ratpile:

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. dubna 20:46
Avatar
ratpile
Člen
Avatar
Odpovídá na ratpile
ratpile:

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. dubna 20:48
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na ratpile
vajkuba1234:
  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. dubna 22:33
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na ratpile
Marian Benčat:

Zkus koukout sem:

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

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

 
Nahoru Odpovědět 4. dubna 2:34
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.