Inquiridor
Asp.net MVC C# produzindo uma view baseado em mais de um controller

Pergunta
-
Bom dia pessoal, sou novo em MVC.
Li o Livro ASP.NET Mvc 1.0.
Mas estou com um problema, preciso montar um formulário onde os dados informados fiquem separados para uma análise futura.
Com relação a validação, eu faço uma para cada classe(tabela) ou tem como eu fazer uma p todos os campos independente do form e da quantidade de tabelas q formam esse formulário?
Controller é para cada tabela ou tem como fazer uma que contrnha todas as informações já que as views são elaboradas com os dados passado pela controller que referencia a model?
Tabela 1 Tabela2
idTAB1 idTAB2
descTAB1 descTAB2
idTAB1
Todas as Respostas
-
Bom, depende colega.
Se seu formulario conter campos relacionados a diversas entidades, o ideal é você usar o FormCollection como parametro do metodo post, e validar cada um por vez.
Mas se seu formulario é relacionado a so uma entidade, pro exemplo Pessoa, voce pode receber a Pessoa como parametro do metodo post, e validar usando DataAnnotations, e no metodo so usar IF (ModelStats.IsValid)
Fui superficial na resposta?
Precisa de mais detalhes?
Contato:albertim_brasil@hotmail.com - Se ajudei, marca como útil
-
Oi Alberto estou com o mesmo problema do Celinho.
minha estrutura é basicamente essa
Termo: idTermo , idUnidade , numeroTermo, matricula, email, descricao
Estimativa : idEstimativa , idTermo , quantidade, valorUnitario
Beneficiário : idBeneficiario , idTermo , nome,cnpj,endereco
Unidade: idUnidade ,codigoUnidade,denominacao
Ao cadastrar um termo na minha view eu tenho os campos de estimativa , beneficiário e unidade.So que consigo validar os campos so da Tabela termo e não dos outros.
Pode me ajudar? segue meu código.
namespace TermoReferencia.Models
{
public class TermoReferenciaFormViewModel
{
public Termo Termo { get; private set; } // tabela principal
public Produto Produto { get; private set; }
public Beneficiario Beneficiario { get; private set; }
public Estimativa Estimativa { get; private set; }
public SelectList Unidades { get; private set; }
public TermoReferenciaFormViewModel(Termo termo)
{
RepositorioTermoReferencia unidadesTermo = new RepositorioTermoReferencia();
Termo = termo;
Beneficiario = new Beneficiario();
Estimativa = new Estimativa();
var unidades = unidadesTermo.FindAllUnidades();
Unidades = new SelectList(unidades,"id","denominacao");
}
}
}//controller
// GET: /TermoReferencia/Create
public ActionResult Create()
{
Termo termo = new Termo();
return View(new TermoReferenciaFormViewModel(termo));
}
// POST: /TermoReferencia/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Termo termo)
{
if (ModelState.IsValid)
{
try
{
repositorioTermoReferencia.AddTermo(termo);
repositorioTermoReferencia.Save();
return RedirectToAction("Index");
}
catch
{
Response.Write("pauuuu");
}
}
return View(new TermoReferenciaFormViewModel(termo));
}
valewwww -
Bom o que você pode fazer, é criar uma classe que mescle todas as 3 que você está usando no formulário.
Contato:albertim_brasil@hotmail.com - Se ajudei, marca como útil.
Twitter: Me siga!!
Blog:http://dotnettime.spaces.live.com/ -
-
Olá,
Olha, eu faria da seguinte forma:
Passaria para o Controller como FormCollection e a validação faria na própria página (lado client) com um plugin chamado validate do jQuery.
Rafael Zaccanini - Twitter @rafaelzaccanini - Contato rafael.zaccanini@gmail.com - Blog rafaelzaccanini.wordpress.com
Se a resposta te ajudou marque como útil
-
Cara, como seria isso, como que na hora de chamar o método de inserção no controller por exemplo
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Termo termo, Produto produto, Beneficiario beneficiario)
{
if (ModelState.IsValid)
{
try
{
repositorioTermoReferencia.AddTermo(termo);
repositorioTermoReferencia.Save();
return RedirectToAction("Index");
}
catch
{
Response.Write("pauuuu");
}
}
return View(new TermoReferenciaFormViewModel(termo,produto,beneficiario));
}ele sabe que vai inserir o termo, ou beneficiário no repositorioTermoReferencia.AddTermo(termo); ??
Tendeu?
-
vc esta indo pelo caminho errado, quando chegar em casa posto um exemplo para voce xD
Contato:albertim_brasil@hotmail.com - Se ajudei, marca como útil.
Twitter: Me siga!!
Blog:http://dotnettime.spaces.live.com/ -
Pense em um model Pessoa possui vários telefones
PessoaModel
public class PessoaModel { public int Id { get; set; } public string Nome { get; set; } public DateTime DataNascimento { get; set; } public string Endereco { get; set; } public DateTime DataCadastro { get; set; } public IList<TelefoneModel> Telefones { get; set; } }
TelefoneModel
public class TelefoneModel { public int Id { get; set; } public string Numero { get; set; } }
PessoaController
[HttpPost] public ActionResult Create(PessoaModel model) { if (ModelState.IsValid) { try { // INSERT return RedirectToAction("Index"); } catch(Exception ex) { throw ex; } } return View(model); }
View Pessoa Create
<h2>Create</h2> <% using (Html.BeginForm()) {%> <%: Html.ValidationSummary(true) %> <fieldset> <legend>Fields</legend> <div class="editor-label"> <%: Html.LabelFor(model => model.Id) %> </div> <div class="editor-field"> <%: Html.TextBoxFor(model => model.Id) %> <%: Html.ValidationMessageFor(model => model.Id) %> </div> <div class="editor-label"> <%: Html.LabelFor(model => model.Nome) %> </div> <div class="editor-field"> <%: Html.TextBoxFor(model => model.Nome) %> <%: Html.ValidationMessageFor(model => model.Nome) %> </div> <div class="editor-label"> <%: Html.LabelFor(model => model.DataNascimento) %> </div> <div class="editor-field"> <%: Html.TextBoxFor(model => model.DataNascimento) %> <%: Html.ValidationMessageFor(model => model.DataNascimento) %> </div> <div class="editor-label"> <%: Html.LabelFor(model => model.Endereco) %> </div> <div class="editor-field"> <%: Html.TextBoxFor(model => model.Endereco) %> <%: Html.ValidationMessageFor(model => model.Endereco) %> </div> <div class="editor-label"> <%: Html.LabelFor(model => model.DataCadastro) %> </div> <div class="editor-field"> <%: Html.TextBoxFor(model => model.DataCadastro) %> <%: Html.ValidationMessageFor(model => model.DataCadastro)%> </div> <div class="editor-label"> <%: Html.LabelFor(model => model.Telefones[0].Numero) %> </div> <div class="editor-field"> <%: Html.TextBoxFor(model => model.Telefones[0].Numero) %> <%: Html.ValidationMessageFor(model => model.Telefones[0].Numero)%> </div> <div class="editor-label"> <%: Html.LabelFor(model => model.Telefones[1].Numero) %> </div> <div class="editor-field"> <%: Html.TextBoxFor(model => model.Telefones[1].Numero) %> <%: Html.ValidationMessageFor(model => model.Telefones[1].Numero)%> </div> <p> <input type="submit" value="Create" /> </p> </fieldset> <% } %>
Veja que para incluir os telefones vc passa o index da sua ILIST
Espero que ajude!!
att,
Leandro Prado
www.leandroprado.com.br
-----------------------
www.leandroprado.com.br