none
Asp.net MVC C# produzindo uma view baseado em mais de um controller RRS feed

  • 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

    quinta-feira, 6 de maio de 2010 18:26

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
    sexta-feira, 7 de maio de 2010 00:10
  • 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

     

     

    segunda-feira, 29 de novembro de 2010 13:50
  • 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/

    segunda-feira, 29 de novembro de 2010 15:52
  • Teria como dar um Exemplo?
    segunda-feira, 29 de novembro de 2010 16:35
  • 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

    segunda-feira, 29 de novembro de 2010 17:07
  • 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?

    terça-feira, 30 de novembro de 2010 13:47
  • 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/

    terça-feira, 30 de novembro de 2010 16:26
  • 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
    quinta-feira, 9 de dezembro de 2010 13:12