MVC 4 + Entity Framework neposílá data – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

MVC 4 + Entity Framework neposílá data – .NET – Fórum – Programujte.comMVC 4 + Entity Framework neposílá data – .NET – Fórum – Programujte.com

 

Mára
~ Anonymní uživatel
31 příspěvků
20. 6. 2013   #1
-
0
-

Dobrý den, dělám jednu aplikaci, popravdě je to můj první web v ASP.NET, proto tam můžou se nacházet úplný nesmysli.
Mám v Entity Frameworku vytvořenou databázi s Vinaři, kde také mám classu pro List, ve kterém by měli být odrůdy, ale bohužel po načtení se ostatní věci načtou, ale list už je prázdný. Nejlepší bude přiložit kód.

Modul

public class Winemaker
    {
        [ScaffoldColumn(false)]
        public long Id { get; set; }

        [Required, Display(Name = "Jméno")]
        public string FirstName { get; set; }
        [Required, Display(Name = "Příjmení")]
        public string LastName { get; set; }
        [Required, Display(Name = "Oblast")]
        public string Area { get; set; }
        [Required, Display(Name = "Odrůdy")]
        public List<Variety> Varietys { get; set; }

        public class Variety
        {
            public string NameVariety { get; set; }
            public bool Check { get; set; }
        }
    }

Metody

[HttpGet]
        public ActionResult Create()
        {
            var winemaker = new Winemaker();

            winemaker.Varietys = new List<Winemaker.Variety>();
            if (winemaker.Varietys.Count == 0)
            {
                winemaker.Varietys.Add(new Winemaker.Variety() { NameVariety = "Veltlínské zelené", Check = false });
                winemaker.Varietys.Add(new Winemaker.Variety() { NameVariety = "Müller Thurgau", Check = false });
                winemaker.Varietys.Add(new Winemaker.Variety() { NameVariety = "Sauvignon", Check = false });
                winemaker.Varietys.Add(new Winemaker.Variety() { NameVariety = "Rýzlink rýnský", Check = false });
                winemaker.Varietys.Add(new Winemaker.Variety() { NameVariety = "Pálava", Check = false });
                winemaker.Varietys.Add(new Winemaker.Variety() { NameVariety = "Muškát moravský", Check = false });
                winemaker.Varietys.Add(new Winemaker.Variety() { NameVariety = "Chardonnay", Check = false });
                winemaker.Varietys.Add(new Winemaker.Variety() { NameVariety = "Svatovavřinecké", Check = false });
                winemaker.Varietys.Add(new Winemaker.Variety() { NameVariety = "Zweigeltrebe", Check = false });
                winemaker.Varietys.Add(new Winemaker.Variety() { NameVariety = "Rulandské modré", Check = false });
                winemaker.Varietys.Add(new Winemaker.Variety() { NameVariety = "Frankovnka", Check = false });
            }
       
            return View(winemaker);
        }

        [HttpPost]
        public ActionResult Create(Winemaker winemaker)
        {
            if (ModelState.IsValid)
            {
                _db.Winemaker.Add(winemaker);
                _db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(winemaker);
        }

 Pro Checkboxi s Daty

<table>
            @for (int i = 0; i < Model.Varietys.Count; i++)
            {
                @Html.HiddenFor(m => m.Varietys[i].NameVariety)
                <tr>
                    <td>@Html.CheckBoxFor(m => m.Varietys[i].Check)</td>
                    <td>@Html.DisplayFor(m => m.Varietys[i].NameVariety)</td>
                </tr>
            }
        </table>

Byl bych moc vděčný za pomoc :-)

Nahlásit jako SPAM
IP: 193.165.218.–
Mára
~ Anonymní uživatel
31 příspěvků
20. 6. 2013   #2
-
0
-

Prosím nevěděl by si někdo aspoň trochu rady, co s tím?

Nahlásit jako SPAM
IP: 193.165.218.–
JardaJirava0
Stálý člen
21. 6. 2013   #3
-
0
-

Ahoj,

  z toho dotazu není úplně patrné, kde přesně vidíš chybu. (Možná proto nikdo neodpověděl.) Zkusím tedy jen odhadovat. Ten problém vidíš v tom, že při POST požadavku se ti nepředá také list s odrůdami. V asp.net mvc to funguje (řeknu správně) a ke zpracování se pošle jen to, co dokáže odeslat klient přes http. To je rozdíl oproti asp.net webforms, kde sis mohl do ViewState uložit další věci (třeba ten list) a ten se ti pak automagicky převedl při post požadavku zpět na list.

Z pohledu zpracování toho požadavku nemusíš vědět, jaké všechny hodnoty jsou v tom listu, bude tě nejspíš zajímat, co přesně uživatel vybral a takovou hodnotu budeš mít naplněnou na vstupu. Je také nevhodné přijímat stejný objekt, který budeš odesílat na výstupu.

Měl bys také dodržet zásadu PRG (POST-REDIRECT-GET) a po provedení POST akce se přesměrovat na, ve tvém případě, Create akci.

Snad jsem se trefil do dotazu.

Pěkný den,

Nahlásit jako SPAM
IP: 77.78.85.–
MCAD, MCPD
http://jirava.net/blog
http://xaml.cz - Magazín moderních technologií založených na XAML
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý