Duas models em uma View
Galera, sou nova por aqui. Estou com um probleminha em uma aplicação que estou fazendo, tenho duas tabelas no banco de dados, x e y, terei dois models, um pra classe x e outro pra classe y, porém eu preciso juntar os dados desas duas tabelas em uma única view, o Partial View não dá pra ser usado porque eu preciso de fazer tudo isso para um CRUD. Gostaria de uma ajuda de vocês!
Leilyanne Souza
Curtidas 0
Melhor post
Joel Rodrigues
26/09/2013
Nesse caso seria interessante utilizar um ViewModel. Veja este post do Eduardo Pires onde ele explica essa questão: [url]http://eduardopires.net.br/2013/08/asp-net-mvc-view-model-pattern-quando-e-como-utilizar/[/url].
Boa sorte.
Boa sorte.
GOSTEI 1
Mais Respostas
Leilyanne Souza
26/09/2013
Eu tentei fazer por esse exemplo já, porém quando eu passo a lista pra view eu não consigo visualizar os atributos.
P.S. ainda estou engatinhando no asp.
P.S. ainda estou engatinhando no asp.
GOSTEI 0
Joel Rodrigues
26/09/2013
Coloque aqui o código da sua view e da chamada (Action).
GOSTEI 0
Leilyanne Souza
26/09/2013
Action:
public ActionResult Create()
{
IList<Licenca> ilLicenca = new List<Licenca>();
var model = new Software
{
Licencas = ilLicenca
};
return View(model);
}
View:
@model SisGAT.Models.Software
@ViewBag.Licenca
@{
ViewBag.Title = "Create";
}
<br />
<h3>
<span style="padding-left:50px">Novo registro</span>
</h3>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Software</legend>
<div class="editor-label">
<span style="padding-left:40px">@Html.LabelFor(model => model.nomSoftware)</span>
</div>
<div class="editor-field">
<span style="padding-left:40px">@Html.EditorFor(model => model.nomSoftware)</span>
@Html.ValidationMessageFor(model => model.nomSoftware)
</div>
<div class="editor-label">
<span style="padding-left:40px">@Html.LabelFor(model => model.nomFabricante)</span>
</div>
<div class="editor-field">
<span style="padding-left:40px">@Html.EditorFor(model => model.nomFabricante)</span>
@Html.ValidationMessageFor(model => model.nomFabricante)
</div>
<br />
<div class="form" >
<form action="/" id="thing-alerts">
<span style="padding-left:40px"><label for="tipSoftware">Tipo de software</label></span>
<select name="tipSoftware">
<option value="pago">Pago</option>
<option value="livre">Livre</option>
</select>
</form>
</div>
<div class="editor-field">
<span style="padding-left:40px">@Html.ValidationMessageFor(model => model.tipSoftware)</span>
</div>
<div class="editor-label">
<span style="padding-left:40px">@Html.LabelFor(model => model.valor)</span>
</div>
<div class="editor-field">
<span style="padding-left:40px">@Html.EditorFor(model => model.valor)</span>
@Html.ValidationMessageFor(model => model.valor)
</div>
<div class="editor-label">
<span style="padding-left:40px"> @Html.LabelFor(model => model.data)</span>
</div>
<div class="editor-field">
<span style="padding-left:40px">@Html.EditorFor(model => model.data)</span>
@Html.ValidationMessageFor(model => model.data)
</div>
<div class="editor-label">
<span style="padding-left:40px">@Html.LabelFor(model => model.numUsu)</span>
</div>
<div class="editor-field">
<span style="padding-left:40px">@Html.EditorFor(model => model.numUsu)</span>
@Html.ValidationMessageFor(model => model.numUsu)
</div>
@foreach (var u in Model.Licencas)
{
}
<br />
<p>
<span style="padding-left:40px"><input type="submit" value="Adicionar" /></span>
</p>
</fieldset>
}
public ActionResult Create()
{
IList<Licenca> ilLicenca = new List<Licenca>();
var model = new Software
{
Licencas = ilLicenca
};
return View(model);
}
View:
@model SisGAT.Models.Software
@ViewBag.Licenca
@{
ViewBag.Title = "Create";
}
<br />
<h3>
<span style="padding-left:50px">Novo registro</span>
</h3>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Software</legend>
<div class="editor-label">
<span style="padding-left:40px">@Html.LabelFor(model => model.nomSoftware)</span>
</div>
<div class="editor-field">
<span style="padding-left:40px">@Html.EditorFor(model => model.nomSoftware)</span>
@Html.ValidationMessageFor(model => model.nomSoftware)
</div>
<div class="editor-label">
<span style="padding-left:40px">@Html.LabelFor(model => model.nomFabricante)</span>
</div>
<div class="editor-field">
<span style="padding-left:40px">@Html.EditorFor(model => model.nomFabricante)</span>
@Html.ValidationMessageFor(model => model.nomFabricante)
</div>
<br />
<div class="form" >
<form action="/" id="thing-alerts">
<span style="padding-left:40px"><label for="tipSoftware">Tipo de software</label></span>
<select name="tipSoftware">
<option value="pago">Pago</option>
<option value="livre">Livre</option>
</select>
</form>
</div>
<div class="editor-field">
<span style="padding-left:40px">@Html.ValidationMessageFor(model => model.tipSoftware)</span>
</div>
<div class="editor-label">
<span style="padding-left:40px">@Html.LabelFor(model => model.valor)</span>
</div>
<div class="editor-field">
<span style="padding-left:40px">@Html.EditorFor(model => model.valor)</span>
@Html.ValidationMessageFor(model => model.valor)
</div>
<div class="editor-label">
<span style="padding-left:40px"> @Html.LabelFor(model => model.data)</span>
</div>
<div class="editor-field">
<span style="padding-left:40px">@Html.EditorFor(model => model.data)</span>
@Html.ValidationMessageFor(model => model.data)
</div>
<div class="editor-label">
<span style="padding-left:40px">@Html.LabelFor(model => model.numUsu)</span>
</div>
<div class="editor-field">
<span style="padding-left:40px">@Html.EditorFor(model => model.numUsu)</span>
@Html.ValidationMessageFor(model => model.numUsu)
</div>
@foreach (var u in Model.Licencas)
{
}
<br />
<p>
<span style="padding-left:40px"><input type="submit" value="Adicionar" /></span>
</p>
</fieldset>
}
GOSTEI 0
Joel Rodrigues
26/09/2013
No caso, você não está conseguindo acessar a propriedade Licencas, é isso?
GOSTEI 0
Leilyanne Souza
26/09/2013
Isso, eu não consigo fazer um EditorFor nem um LaberFor pq ele não encontra as propriedades.
GOSTEI 0
Joel Rodrigues
26/09/2013
Experimente o seguinte:
1) Salvar tudo, dar um build no projeto e tentar novamente.
2) Ao invés de usar var, utilize Licenca no for.
1) Salvar tudo, dar um build no projeto e tentar novamente.
2) Ao invés de usar var, utilize Licenca no for.
GOSTEI 0
Leilyanne Souza
26/09/2013
Consegui aqui, fiz assim:
@foreach ( SisGAT.Models.Licenca u in Model.Licencas)
Agora eu preciso saber como usar o editorFor e laberFor com essas propriedades?
@foreach ( SisGAT.Models.Licenca u in Model.Licencas)
Agora eu preciso saber como usar o editorFor e laberFor com essas propriedades?
GOSTEI 0
Leilyanne Souza
26/09/2013
P.S. Como eu faria esse for?
GOSTEI 0
Joel Rodrigues
26/09/2013
Você quer permitir que o usuário selecione várias licenças para o registro atual?
GOSTEI 0
Leilyanne Souza
26/09/2013
Para cada objeto de software o usuário vai selecionar uma licença.
GOSTEI 0
Joel Rodrigues
26/09/2013
Para cada objeto de software o usuário vai selecionar uma licença.
É apenas uma, ou são várias?Se for só uma, por que Software tem uma lista de Licenca? E se for só uma, use o DropDownFor.
GOSTEI 0
Rodrigo Odasaki
26/09/2013
Leilyanne Souza, eu prefiro que você diga, "asp.net" ou ".net".
Agora só asp, muda tudo.
heheeh
Agora só asp, muda tudo.
heheeh
GOSTEI 0
Leilyanne Souza
26/09/2013
Leilyanne Souza, eu prefiro que você diga, "asp.net" ou ".net".
Agora só asp, muda tudo.
heheeh
Agora só asp, muda tudo.
heheeh
Vc está certo, usarei isso da próxima vez!
GOSTEI 0