NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Petr Žilínský :29.10.2017 17:21

Ahojte, potřeboval bych poradit s vazbou OneToMany v modelech.
Chci udělat fakt jednoduché CRM. Jde o to, že mám article:

[Key]
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Content { get; set; }
[NotMapped]
public int Sections { get; set; }

public Section Section { get; set; }

a section:

[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }

public ICollection<Article> Articles { get; set; }

Vytvořil jsem si kontroler s vygenerovanými views a entity frameworkem. Pro article mám ArticleController a pro section mám SectionController.
Při vytváření articlu mám dropdown, ve kterém jsou všechny sekce a odesílá se jejich Id do atributu Sections.

@Html.DropDownListFor(model => model.Sections, new SelectList(ViewBag.Sections, "Id", "Name"), new { @class = "form-control" })

Pak mám následující funkci:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Title,Description,Content, Sections")] Article article)
{
    if (ModelState.IsValid)
    {
        article.Section = await this._context.Section.SingleOrDefaultAsync(s => s.Id == article.Sections);
        _context.Add(article);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }
    return View(article);
}

Jak je možné, že když si pak rozliknu detail articlu, tak má pořád u section null ?

<dt>
    @Html.DisplayNameFor(model => model.Section)
</dt>
<dd>
    @Html.DisplayFor(model => model.Section.Name)
</dd>

Budu moc rád za jakékoli odpovědi. Díky moc

 
Odpovědět
29.10.2017 17:21
Avatar
Odpovídá na Petr Žilínský
Michal Štěpánek:15.11.2017 13:56

Nemůže to být třeba tím, že v "article" máš u id section "NotMapped"?

Nahoru Odpovědět
15.11.2017 13:56
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Žilínský
vajkuba1234:15.11.2017 15:56

Mohl bys mi prosimte slovne popsat tento radek? Co presne tady delas? Mi to teda moc nedava smysl a divim se, ze nerve visual studio...

article.Section = await this._context.Section.SingleOrDefaultAsync(s => s.Id == article.Sections);
Nahoru Odpovědět
15.11.2017 15:56
No hope, no future, JUST WAR!
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Žilínský
vajkuba1234:15.11.2017 20:30

Aha, uz to vidim. Kazdopadne, "public int Sections { get; set; }" je blbost, protoze to ma byt "SectionId", atribut NotMapped dej pryc. Dale by ti bohate stacilo si udelat viewmodel, ktery naplnis ve view, po odeslani formu prijme metoda ActionResult Create onen naplneny viewmodel, ve kterem budes mit z dropdownu ID te klonkretni sekce, prijaty viewmodel namapujes na model a muzes ho ulozit do databaze.

Mam dojem, ze se to tady uz nekolikrat resilo, tak pohledej zde na foru, pripadne se ptej.

Editováno 15.11.2017 20:32
Nahoru Odpovědět
15.11.2017 20:30
No hope, no future, JUST WAR!
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 4 zpráv z 4.