MVC4 Html.DropDownListFor z DB (ViewData)   otázka

ASP.NET WebForms

Zdravím,

omlouvám se asi za triviální otázku, ale nemohu se dopátrat řešení.

Zkouším dle návodu (aplikace NerdDinner - ofic. stránky + benevolentí překlad na programujte.com) implementovat Html.DropDownListFor. Každý pokus končí chybou při zobrazení stránky (typově: problém s IEnumerable, neplatné argumenty, PInvoke apod.)

Mám tabulky, mezi nimiž je vztah (klasicky číselník), tj.

1) Tabulka

CREATE TABLE [dbo].[Credential](

[intCredentialId] [int] IDENTITY(1,1) NOT NULL,

[strCredentialName] [nvarchar](50) NOT NULL,

[strCredentialDescription] [nvarchar](50) NULL,

[intNewLineTypeId] [int] NOT NULL,...

2) Číselník

CREATE TABLE [dbo].[ListNewLineType](

[intNewLineTypeId] [int] IDENTITY(1,1) NOT NULL,

[strKey] [nvarchar](50) NOT NULL,

[strValue] [nvarchar](50) NOT NULL,

[strDescription] [nvarchar](255) NULL,

[dateCreated] [date] NOT NULL,

CONSTRAINT [PK_ListNewLineType] PRIMARY KEY CLUSTERED....

Relace je tvořena přes "[intNewLineTypeId]"

V aplikaci mám přidaný DBML soubor (DataContext).

Jak mám modifikovat Controller (metodu Create/Edit kde volám řádek na nastavení "ViewData") a šablonu, aby mi fungoval DropDownListFor?

Pro úplnost přikládám pár kandidátů, které se mi nepodařilo rozchodit:

//ListNewLineTypeRepository myListNewLineTypeRepository = new ListNewLineTypeRepository();
//ViewData["ListNewLineType"] = new SelectList(myListNewLineTypeRepository.FindAllListNewLineTypes().ToList(),
//    "strKey", "strValue", 1).ToList();
                          
//ListNewLineTypeRepository myListNewLineTypeRepository = new ListNewLineTypeRepository();
//ViewData["ListNewLineType"] = new SelectList(myListNewLineTypeRepository.FindAllListNewLineTypes().ToList(), "strKey", "strValue"); 

//myListNewLineTypeRepository.FindAllListNewLineTypes().Select(
 //   b => new SelectListItem { Value = b.strKey, Text = b.strValue });

//DataContext datacontext = new DataContext();

//var a = (from m in datacontext.ListNewLineTypes
 //        select new SelectListItem { Text = m.strKey.ToString(), Value = m.strValue.ToString() });

//ViewData["ListNewLineType"] = new SelectList(
 // (IEnumerable<string>)myCredential.ListNewLineType, myCredential.ListNewLineType);

//var states = new SelectList((System.Collections.IEnumerable)ViewData["States"], "Value", "Text");

//ViewData["ListNewLineType"] = new SelectList(myCredential.ListNewLineType, myCredential.intNewLineTypeId);

----------------------------

' TOTO SE VYPÍŠE ČÍSLEM, TJ. HODNOTA JE NAPLNĚNÁ
<%: Html.LabelFor(model => model.intNewLineTypeId) %>

<%= Html.DropDownList("intNewLineTypeId", ViewData["ListNewLineType"] as SelectList) %>

<%: Html.DropDownList("ListNewLineTypes", Model.ListNewLineType %>

<%: Html.DropDownList("ListNewLineTypes", new SelectList(Model.ListNewLineType, "intListNewLineTypeId", "stValue")) %>
                            
<%: Html.DropDownListFor(model => model.ListNewLineType, new SelectList(Model.ListNewLineType, "strKey", "stValue"))%>

Děkuji, Petr

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravím,

tak konečně po 3 dnech boje jsem to rozjel a našel i odpověď s vysvětlením:

"The reason behind this problem is that asp.net MVC first looks for a match between the name of the drop down and a property on the model. If there’s a match, the selected value of the SelectList is overridden. Changing the name of the drop down is all it takes to remedy the issue."

Celý detail s kódem:

http://forums.asp.net/t/1667059.aspx/1

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback