Array
(
)

Duas models em uma View

Leilyanne Souza
   - 26 set 2013

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!

Joel Rodrigues
   - 26 set 2013

Nesse caso seria interessante utilizar um ViewModel. Veja este post do Eduardo Pires onde ele explica essa questão: http://eduardopires.net.br/2013/08/asp-net-mvc-view-model-pattern-quando-e-como-utilizar/.
Boa sorte.

Leilyanne Souza
   - 26 set 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.

Joel Rodrigues
   - 26 set 2013

Coloque aqui o código da sua view e da chamada (Action).

Leilyanne Souza
   - 26 set 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>
}

Joel Rodrigues
   - 26 set 2013

No caso, você não está conseguindo acessar a propriedade Licencas, é isso?

Leilyanne Souza
   - 26 set 2013

Isso, eu não consigo fazer um EditorFor nem um LaberFor pq ele não encontra as propriedades.

Joel Rodrigues
   - 26 set 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.

Leilyanne Souza
   - 26 set 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?

Leilyanne Souza
   - 26 set 2013

P.S. Como eu faria esse for?

Joel Rodrigues
   - 26 set 2013

Você quer permitir que o usuário selecione várias licenças para o registro atual?

Leilyanne Souza
   - 26 set 2013

Para cada objeto de software o usuário vai selecionar uma licença.

Joel Rodrigues
   - 26 set 2013


Citação:
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.

Rodrigo Odasaki
   - 26 set 2013

Leilyanne Souza, eu prefiro que você diga, "asp.net" ou ".net".
Agora só asp, muda tudo.
heheeh

Leilyanne Souza
   - 27 set 2013


Citação:
Leilyanne Souza, eu prefiro que você diga, "asp.net" ou ".net".
Agora só asp, muda tudo.
heheeh


Vc está certo, usarei isso da próxima vez!