Como validar campos de um formulário? Asp .net C sharp

12/01/2016

0

Boa tarde,

Estou precisando validar alguns campos da minha aplicação, campos que não podem ser nulos.
Quando eu deixava o campo em branco dava um erro quando eu ia salvar no banco de dados, para resolver isso utilizei o operado ?:, mas não sei como colocar uma ação na segunda expressão.

Será que alguém pode me ajudar com essa questão, por favor?

Se o campo não for nulo ou vazio ele manda para o banco o valor do campo, se não ele manda um valor nulo (zero).

func._Nome = (!string.IsNullOrEmpty(txtNome.Text) ? (txtNome.Text) : null);


Eu criei uma função que exibe um pop up dizendo que o campo não pode ser nulo e gostaria de chama-la no lugar do NULL.

Porem, acho q ele só vai verificar isso quando for executar o método. Onde eu tenho que fazer a verificação, quando ele for passar os valores para o método ou quando perder o foco do text box? como faço isso?

Comando completo:
protected void btnUpdade_Click(object sender, EventArgs e)
        {
            Funcionarios func = new Funcionarios();

            //atribuindo os valores dos text box para as variáveis no OBJETO
            func._ID = Convert.ToInt32(!string.IsNullOrEmpty(lblID.Text.ToString()) ? (lblID.Text) : null);//Não pode ser NULO
            func._Nome = (!string.IsNullOrEmpty(txtNome.Text) ? (txtNome.Text) : null);//não pode ser nulo
            func._NrReg= Convert.ToInt32(!string.IsNullOrEmpty(txtNreg.Text.ToString()) ? (txtNreg.Text) : null);
            func._Ramal = Convert.ToInt32(!string.IsNullOrEmpty(txtRamal.Text.ToString()) ? (txtRamal.Text) : null);//não pode ser NULO
            func._Empregador = Convert.ToInt32(!string.IsNullOrEmpty(ddlEmpregador.SelectedValue.ToString()) ? (ddlEmpregador.SelectedValue) : null); //não pode ser nulo
            func._Cargo = Convert.ToInt32(!string.IsNullOrEmpty(ddlCargo.SelectedValue.ToString()) ? (ddlCargo.SelectedValue) : null);//não pode ser nulo
            func._Area = Convert.ToInt32(!string.IsNullOrEmpty(ddlArea.SelectedValue.ToString()) ? (ddlArea.SelectedValue) : null);//não pode ser nulo
            func._HrEntra = Convert.ToDateTime(!string.IsNullOrEmpty(txtHrEntra.Text.ToString()) ? (txtHrEntra.Text) : null);
            func._HrSai = Convert.ToDateTime(!string.IsNullOrEmpty(txtHrSai.Text.ToString()) ? (txtHrSai.Text) : null);
            func._DtNasc = Convert.ToDateTime(!string.IsNullOrEmpty(txtDataNasc.Text.ToString()) ? (txtDataNasc.Text) : null);//não pode ser nulo
            func._DtAtu = DateTime.Now;

            try
            {
                func.AlteraFuncionarios();
                lblStatus.Text = ("Dados Atualizados!!!");

                //atualizar grid...
                GridPrincipal.DataSource = func.ListaFuncionarios();
                GridPrincipal.DataBind();

                //limpa text box e combos
                LimpaCampos(this);
                LimpaCombos(this); //ARRUMAR

                //pop up informando que os dados foram alterados
                string alerta = "Dados alterados!!";
                this.ClientScript.RegisterClientScriptBlock(this.GetType(), "alerta", "<script type='text/javascript'>alert('" + alerta + "')</script>"); 
            }
            catch (Exception ex)
            {
                lblStatus.Text = ("Erro na atulização: " + ex);
            }
        }


Mensagem
 //POP UP de campo obrigatório
        public void CampoObrigatorio()
        {
            this.ClientScript.RegisterClientScriptBlock(this.GetType(), "alerta", "<script type='text/javascript'>alert('Campo Obrigatório: ')</script>"); 
        }


obrigado.
Ricardo

Ricardo

Responder

Posts

24/02/2016

Ricardo

Agora ele criou o controller, eu refiz todo o projeto e tinha esquecido de colocar o nome da conexão no web config. Mas não está criando as tabelas e está dando erro na connection string...

[img]http://arquivo.devmedia.com.br/forum/imagem/451395-20160224-115638.png[/img]

[img]http://arquivo.devmedia.com.br/forum/imagem/451395-20160224-115711%20%281%29.png[/img]
Responder

24/02/2016

Ricardo

Consegui acertar aqui...

  <connectionStrings>
    <add name="BlogContext" connectionString="Data Source=WIN-MKVUVQQTTBL\RPAZZINI;Initial Catalog=BlogBDLivro;User ID=sa;Password=123456" providerName="System.Data.SqlClient" />
  </connectionStrings>


obrigado...
Responder

24/02/2016

Jothaz

O erro em questão e ao acessar o banco de dados e pode se originar de várias causas, tais como:

1-Sua servidor de banco de dados esta aceitando conexão TCP/IP? Pela mensagem acho que o problema pode ser este.

2-A string de conexão usada no web.config esta correta? Tente conectar ao banco de dados via Visual Studio e copie a string de conexão gerada.

3-O servidor esta mesmo funcionando, testou usando por exemplo o Management Studio.
Responder

25/02/2016

Ricardo

Jothaz, a string de conexão estava incorreta.

agora estou com outro problema, estou seguindo com o livro e agora vai começar a parte de controllers e logo no inicio está dando erro, assim como aconteceu nos capítulos anteriores.

Bom, nessa aplicação eu criei o banco de dados pelo SQL e depois vinculei ele à aplicação utilizando o entity framework, até ai tudo bem, ele gerou as classes do banco de dados e eu criei novas classes (classes parciais) para fazer a validação dos campos.

Quando criei o primeiro controller ele está falando "Error 1 Cannot convert lambda expression to type 'string' because it is not a delegate type"

Controller MedicosController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CadeMeuMedico.Models;

namespace CadeMeuMedico.Controllers
{
    public class MedicosController : Controller
    {
        private EntidadesCadeMeuMedicoBD db = new EntidadesCadeMeuMedicoBD();


        public ActionResult Index()
        {
            var medicos = db.Medicos.Include(m => m.Cidade).Include(m => m.Especialidade).ToList();
            return View(medicos);
        }
    }
}


ele marca como errado "m=>m.Cidade", mas se eu inverto a ordem colocando (m=>m.Especialidade) na frente, o erro fica nele.

Esses dois campos são chaves estrangeiras na minha tabela Medicos. Pelo o que eu entendi, ele faz referencia à classe que eu criei para validar os campos.

Classe que valida CIdades
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace CadeMeuMedico.Models
{
    [MetadataType(typeof(CidadesMetadados))]
    public partial class Cidades
    {
    }

    public class CidadesMetadados
    {
        [Required(ErrorMessage = "Obrigatório informar a cidade")]
        [StringLength(30, ErrorMessage = "A cidade deve possuir no máximo 80 caracteres")]
        public string Cidade { get; set; }
    }
}


Classe Cidades gerada pelo EF
//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace CadeMeuMedico.Models
{
    using System;
    using System.Collections.Generic;
    
    public partial class Cidades
    {
        public Cidades()
        {
            this.Medicos = new HashSet<Medicos>();
        }
    
        public int IDCidade { get; set; }
        public string Nome { get; set; }
    
        public virtual ICollection<Medicos> Medicos { get; set; }
    }
}


O estranho é que está exatamente como no livro, e até agora em todos os capítulos tive que fazer alguma alteração ou pesquisar algo para os exemplos funcionarem e o livro é "novo", é de 2014...

Valeu.
Responder

26/02/2016

Ricardo

Como eu faço para utilizar os atributos atributos das minhas tabelas do banco de dados?

Eu criei uma instancia do meu banco de dados, e através dela eu consigo instanciar outro objeto com uma tabela especifica do banco de dados, mas não consigo utilizar os atributos dessa tabela.

Por exemplo, no meu banco de dados tem uma tabela chamada MEDICO com o atributo nome. Eu criei uma instancia do banco de dados BD e com ela consigo utilizar todas as tabelas... BD.MEDICO isso está ok, mas eu não consigo utilizar o atributo NOME ==> BD.MEDICO.NOME, qndo faço isso da erro...
"'CadeMeuMedico.Models.Medico' does not contain a definition for 'IDCidade' and no extension method 'IDCidade' accepting a first argument of type 'CadeMeuMedico.Models.Medico' could be found (are you missing a using directive or an assembly reference?)"

Eu utilizei o Entity Framework para vincular o meu banco de dados ao VS, ele gerou algumas classes (classes parciais), dei uma olhada nessas classes e todos os atributos estão como publico... Onde eu tenho que ir para resolver isso??

Como ainda não sei direito os termos que utilizar na minha pergunta, segue Controller que está apresentando os erro para um melhor entendimento. Os erros estão em "db.Medicos.Add(medico);", "..., medico.IDCidade);" e "..., medico.IDEspecialidade);"

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CadeMeuMedico.Models;
using System.Data;
using System.Data.Entity;


namespace CadeMeuMedico.Controllers
{
    public class MedicosController : Controller
    {
        private EntidadesCadeMeuMedicoBD db = new EntidadesCadeMeuMedicoBD();

        public ActionResult Index()
        {
            ///no livro está assim - Pg. 86
            ///mas dessa forma da erro na expressão lambda....
            //var medicos = db.Medicos.Include(m => m.Cidade).Include(m => m.Especialidade).ToList();
            
            var medicos = db.Medicos.Include("Cidades").Include("Especialidades").ToList();
            return View(medicos);
        }

        
        public ActionResult Adicionar()
        {
            ViewBag.IDCidade = new SelectList(db.Cidades, "Cidades", "Nome");
            ViewBag.IDEspecialidade = new SelectList(db.Especialidades, "IDEspecialidades", "Nome");
            return View();
        }

        [HttpPost]
        public ActionResult Adicionar(Medico medico)
        {
            if (ModelState.IsValid)
            {
                db.Medicos.Add(medico);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.IDCidade = new SelectList(db.Cidades, "IDCidade", "Nome", medico.IDCidade);
            ViewBag.IDEspecialidade = new SelectList(db.Especialidades, "IDEspecialidade", "Nome", medico.IDEspecialidade);
            
            return View(medico);
        }

    }
}


Obrigado.
Responder

26/02/2016

Ricardo

Achei o problema aqui... por algum motivo ele traz Medico e MedicoS no auto completar quando eu começo a digitar, e ta dando erro pq eu criei um objeto do tipo Medico, mas o correto seria do tipo MedicoS......

Mas o motivo do erro na expressão lambda eu não achei ainda, alterei o código daquela forma pq o livro disponibiliza todo o código do projeto para download....

Valeu....
Responder

01/03/2016

Ricardo

Boa tarde,

Fiz a ligação com o banco de dados utilizando o entity framework, ele criou o diagrama e as classes parciais do banco, agora precisei adicionar uma nova tabela no meu banco de dados e não sei como fazer isso no meu projeto.

Eu cliquei com o botão direto do mouse em uma área em branco do diagrama e fui em "update model from database", selecionei a nova tabela e cliquei em finish, a nova tabela apareceu no diagrama, mas a classe não foi criada.

Como faço para a classe parcial da nova tabela ser criada automaticamente pelo EF?

Att.,
Responder

19/04/2016

Ricardo

Boa tarde,

Jotaz, obrigado pela ajuda com a Connection string e pela ajuda e dicas nos outros tópicos que postei aqui no fórum.

Joel, obrigado pelo exemplo e pelas dicas.

Bom, eu li um livro de ASP .NET MVC e assisti as videos aulas que você (Joel) recomendou, porem fiquei com uma dúvida em como fazer a manipulação do banco de dados.

1 - Devo usar ADO ou Entity Framework?

2 - Na utilização do entity framework, é melhor eu fazer o mapeamento do banco utilizando o visual studio (New item --> ADO .NET Entity Data Model) ou criar tudo manualmente (classe de contexto herdando de DbContext, e as classes referentes a cada tabela do meu banco de dados) na pasta models?

3 - Outra coisa sobre a utilização de repositórios, nas videos aulas o exemplo dado foi utilizando repositórios, mas não ficou muito claro isso pra mim, pelo que eu entendi eu preciso criar DLL's (new project --> class library),
uma DLL para as Entidades (bancos de dados) com a classe de contexto e as classes das tabelas;
e uma DLL com os métodos que serão executados, nessa classe preciso ter uma interface que diz quais métodos serão executados;
e um projeto ASP .NET onde eu informo a strig de conexão e chamo os métodos nas actios...
Isso ainda está bem confuso pra mim....

Sobre o ADO .NET e o Entity Framework, pelo o que eu entendi o EF veio para facilitar a manipulação dos dados, já que as expressões lambdas são mais "curtas" do que os sql commands...

Você conhece algum tutorial bom sobre EF e expressão lambda? pois estou apanhando bastante aqui em algumas consultas...

Obrigado.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar