ASP.Net MVC - Alterar dados

Nesta aula iremos aprender como alterar os dados listados no banco de dados em um formulário utilizando ASP.Net MVC.

assinaturaAssine nossa Comunidade

Asp Net MVC - Alterar Dados

O objetivo da aula de hoje é fazer alteração dos itens na lista que cadastramos na aula anterior.

Iremos criar uma nova coluna para alterar cada item. Nesta coluna vamos inserir o link que vai redirecionar para a rota de alteração (/paginas/editar).

      
        @{
          ViewBag.Title = "home Page";
          List< Business.Pagina> paginas = ViewBag.Paginas;
        }
 
      < div class = "jumbotron">
        < h1>Paginas < /h1>
        < div>
          < a href="/paginas/novo" class = "btn btn-default"> Nova pagina < /a>
        < /div
        < table class = "table"> 
          < tr> 
            < td>Id < /td>
            < td>Nome < /td>
            < td>Data < /td>
            < td> < /td>
          < /tr>

          @foreach (var p paginas) 
          {
            < tr> 
              < td>@p.Id < /td>
              < td>@p.Nome < /td>
              < td>@p.Data < /td>
              < td> < a href="/paginas/@p.Id/editar">Alterar Dados < /td>
          < /tr>

          }

        < /table> 

      < /div>

      
    

No arquivo de rotas vamos inserir a rota para editar os dados que receberá o parâmetro do Id da página que iremos alterar.

      

      routes.MapRoute(
        "paginas_editar",
        "paginas/{id}/editar",
        new { controller = "Paginas", action = "Editar", id = 0 }
      );

       routes.MapRoute(
         name: "Default",
         url: "{controller}/{action}/{id}",
         defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
       );
       
    

Na controller Paginas criaremos uma nova rota Editar, que receberá o parâmetro id. Será necessário também criar um novo arquivo html para renderizar a página.

      
        namespace MVC_GerenciadorDeConteudo.Controllers
        {
          public class PaginasController : Controller 

            public ActionResult Index()
            {
              ViewBag.Paginas = new Pagina().Lista();
              return View();
            }

            public ActionResult Novo()
            {
              return View();
            }

            
            public ActionResult Editar(int id)
            {
              
              var pagina = Pagina.BuscaPorId(id);
              ViewBag.Pagina = pagina;
              return View();
              
            }
        }
       
    

Vamos criar um formulário na pasta Views chamado Editar.cshtml, para mostrar os dados que serão editados.

Na tag form, método action, incluiremos a rota que irá alterar o formulário quando o usuário clicar no botão alterar.

      
        < div class = "jumbotron">
          < h1>Nova pagina < /h1>
          < div>
            < a href="/paginas" class = "btn btn-default"> Voltar < /a>
          < /div
          
          < form action="/paginas/@pagina.Id/alterar" method="post">
            < div class="form-group">
              < label for "nome"> Nome: < /label>
              < input type="text" class="form-control" id="nome" value="@pagina.Nome" name="nome" >
            < /div >
            < div class="form-group">
              < label for "data"> Data: < /label>
              < input type="datetime" class="form-control" id="data" value="@pagina.Data" name="data" >
            < /div >
            < div class="form-group">
              < label for "data"> Data: < /label>
              < input type="datetime" class="form-control" id="data" value="@pagina.Data" name="data" >
            < /div >
            < div class="form-group">
              < label for "conteudo"> Data: < /label>
              < textarea  id="conteudo" name="conteudo"  class="form-control"> @pagina.Conteudo < /textarea>
            < /div >
            < button type="submit" class="btn btn-default"> Alterar < /button>
          < /form>
        < /div>
      
    

Vamos construir uma nova rota para alterar os dados.

      

      routes.MapRoute(
        "paginas_alterar",
        "paginas/{id}/alterar",
        new { controller = "Paginas", action = "Alterar", id = 0 }
      );

      routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
       
    

Vamos construir uma nova action do tipo [HttpPost] para alterar os dados. Nesta classe terá uma chamada ao método , BuscaPorId, retornando a pagina que queremos alterar.

      
        namespace MVC_GerenciadorDeConteudo.Controllers
        {
          public class PaginasController : Controller 

            [HttpPost]
            public void Alterar(int Id)
            {
              var pagina = Pagina.BuscaPorId(id);

              DateTime data;
              DateTime.TryParse(Request["data"],out data);
              
              pagina.Nome =  Request["nome"];
              pagina.Data = Request["nome"];
              pagina.Conteudo = Request["nome"];
              pagina.save();

              Response.Redirect("/paginas");
            }
        }
       
    

Na classe Pagina, criaremos o método BuscaPorId.

      
        namespace Business
        {
          public class Pagina
          {
            public int Id { get;set };
            public string Nome { get;set };
            public string Conteudo { get;set };
            public DateTime Data { get;set };
          }
         
          public static object BuscaPorId(int id)
          {
            var pagina = new Pagina();
            var paginaDb = Database.Pagina();
            foreach(DataRow row in paginaDb.BuscaPorId().Rows)
            {
              pagina.Id = Convert.ToInt32(row["id"]);
              pagina.Nome = row["nome"].ToString();
              pagina.Conteudo = row["conteudo"].ToString();
              pagina.Data = Convert.ToDateTime(row["data"]);
            }
            return pagina;
          }

          public void Save() 
          {
            new Database.Pagina().Salvar(this.Id, this.Nome, this.Conteudo, this.Data);
          }
        } 
      
    

Na classe Database, teremos o código do método BuscaPorId, que retornará um DataTable referente ao Id que queremos alterar.

      
        namespace Database
        {
          public class Pagina
          {
            private string sqlConn() 
            {
              return ConfigurationManager,AppSettings["SqlConn"];
            }
  
            public DataTable BuscaPorId(int id) 
            {
              using (SqlConnection connection = new SqlConnection(SqlConn()))
              {
                string queryString = "select * from paginas where id=" + id;
                SqlCommand command = new SqlCommand(queryString, connection);
                command.Connection.Open();
                
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = command;
  
                DataTable table = new DataTable();
                adapter.Fill(table);
                return table;
  
              }
            }
          }
        }
       
     

Chamaremos o método Salve() na classe Business, que por sua vez, irá chamar o método Salvar() da classe Database.

      
        namespace Business
        {
          public void Save() 
          {
            new Database.Pagina().Salvar(this.Id, this.Nome, this.Conteudo, this.Data);
          }
        } 
      
    

Método Salvar da classe Database que ira executar a instrução update.

      
        namespace Database
        {
          public class Pagina
          {
  
            public void Salvar(int id, string nome, string conteudo, DateTime data) 
            {
              using (SqlConnection connection = new SqlConnection(connectionString))
  
              {
  
                string queryString = "insert into paginas(nome, data,conteudo) values 
                          ('"+nome +"','"+ data.ToString("yyyy-mm-dd hh:mm:ssss") +"','"+ conteudo +"')";
                if (id !=0)
                {
                  queryString = "update paginas set nome = '"+ nome +"', data = '" +  
                          data.ToString("yyyy-mm-dd hh:mm:ssss") + "',conteudo = '"+ conteudo +"' where id = " + id;
                }
                
                SqlCommand command = new SqlCommand(queryString, connection);
                command.Connection.Open();
                command.ExecuteNonQuery();
              }
            }
          }
        }
       
    

Podemos mostrar uma mensagem para o usuário de página alterada com sucesso. Caso ocorra um erro, também mostraremos uma mensagem de erro, utilizando o bloco try-catch.

      
        namespace MVC_GerenciadorDeConteudo.Controllers
        {
          public class PaginasController : Controller 

            [HttpPost]
            public void Alterar(int Id)
            {
              try 
              {
                var pagina = Pagina.BuscaPorId(id);

                DateTime data;
                DateTime.TryParse(Request["data"],out data);
                
                pagina.Nome =  Request["nome"];
                pagina.Data = Request["nome"];
                pagina.Conteudo = Request["nome"];
                pagina.save();

                TempData["sucesso"] = "Página alterada com sucesso";
              }
              catch 
              {
                TempData["erro"] = "Página não pode ser alterada";
              }
              Response.Redirect("/paginas");
            }
        }
       
    

Para mostrar a mensagem na tela, criaremos as tags div TempData["Sucesso"] e TempData["erro"] no arquivo Index.chtml.

      
        @{
          ViewBag.Title = "home Page";
          List< Business.Pagina> paginas = ViewBag.Paginas;
        }

        @if (TempData["Sucesso"] != null ){
          < div class="alert alert-success"> TempData["Sucesso"] < /div>
        }

        @if (TempData["erro"] != null){
          < div class="alert alert-danger"> TempData["erro"] < /div>
        }
       
      
    

ASP.Net MVC - Alterar dados

Nesta aula iremos aprender como alterar os dados listados no banco de dados em um formulário utilizando ASP.Net MVC.

Próximas Aulas:
assinaturaAssine nossa Comunidade

Asp Net MVC - Alterar Dados

O objetivo da aula de hoje é fazer alteração dos itens na lista que cadastramos na aula anterior.

Iremos criar uma nova coluna para alterar cada item. Nesta coluna vamos inserir o link que vai redirecionar para a rota de alteração (/paginas/editar).

      
        @{
          ViewBag.Title = "home Page";
          List< Business.Pagina> paginas = ViewBag.Paginas;
        }
 
      < div class = "jumbotron">
        < h1>Paginas < /h1>
        < div>
          < a href="/paginas/novo" class = "btn btn-default"> Nova pagina < /a>
        < /div
        < table class = "table"> 
          < tr> 
            < td>Id < /td>
            < td>Nome < /td>
            < td>Data < /td>
            < td> < /td>
          < /tr>

          @foreach (var p paginas) 
          {
            < tr> 
              < td>@p.Id < /td>
              < td>@p.Nome < /td>
              < td>@p.Data < /td>
              < td> < a href="/paginas/@p.Id/editar">Alterar Dados < /td>
          < /tr>

          }

        < /table> 

      < /div>

      
    

No arquivo de rotas vamos inserir a rota para editar os dados que receberá o parâmetro do Id da página que iremos alterar.

      

      routes.MapRoute(
        "paginas_editar",
        "paginas/{id}/editar",
        new { controller = "Paginas", action = "Editar", id = 0 }
      );

       routes.MapRoute(
         name: "Default",
         url: "{controller}/{action}/{id}",
         defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
       );
       
    

Na controller Paginas criaremos uma nova rota Editar, que receberá o parâmetro id. Será necessário também criar um novo arquivo html para renderizar a página.

      
        namespace MVC_GerenciadorDeConteudo.Controllers
        {
          public class PaginasController : Controller 

            public ActionResult Index()
            {
              ViewBag.Paginas = new Pagina().Lista();
              return View();
            }

            public ActionResult Novo()
            {
              return View();
            }

            
            public ActionResult Editar(int id)
            {
              
              var pagina = Pagina.BuscaPorId(id);
              ViewBag.Pagina = pagina;
              return View();
              
            }
        }
       
    

Vamos criar um formulário na pasta Views chamado Editar.cshtml, para mostrar os dados que serão editados.

Na tag form, método action, incluiremos a rota que irá alterar o formulário quando o usuário clicar no botão alterar.

      
        < div class = "jumbotron">
          < h1>Nova pagina < /h1>
          < div>
            < a href="/paginas" class = "btn btn-default"> Voltar < /a>
          < /div
          
          < form action="/paginas/@pagina.Id/alterar" method="post">
            < div class="form-group">
              < label for "nome"> Nome: < /label>
              < input type="text" class="form-control" id="nome" value="@pagina.Nome" name="nome" >
            < /div >
            < div class="form-group">
              < label for "data"> Data: < /label>
              < input type="datetime" class="form-control" id="data" value="@pagina.Data" name="data" >
            < /div >
            < div class="form-group">
              < label for "data"> Data: < /label>
              < input type="datetime" class="form-control" id="data" value="@pagina.Data" name="data" >
            < /div >
            < div class="form-group">
              < label for "conteudo"> Data: < /label>
              < textarea  id="conteudo" name="conteudo"  class="form-control"> @pagina.Conteudo < /textarea>
            < /div >
            < button type="submit" class="btn btn-default"> Alterar < /button>
          < /form>
        < /div>
      
    

Vamos construir uma nova rota para alterar os dados.

      

      routes.MapRoute(
        "paginas_alterar",
        "paginas/{id}/alterar",
        new { controller = "Paginas", action = "Alterar", id = 0 }
      );

      routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
       
    

Vamos construir uma nova action do tipo [HttpPost] para alterar os dados. Nesta classe terá uma chamada ao método , BuscaPorId, retornando a pagina que queremos alterar.

      
        namespace MVC_GerenciadorDeConteudo.Controllers
        {
          public class PaginasController : Controller 

            [HttpPost]
            public void Alterar(int Id)
            {
              var pagina = Pagina.BuscaPorId(id);

              DateTime data;
              DateTime.TryParse(Request["data"],out data);
              
              pagina.Nome =  Request["nome"];
              pagina.Data = Request["nome"];
              pagina.Conteudo = Request["nome"];
              pagina.save();

              Response.Redirect("/paginas");
            }
        }
       
    

Na classe Pagina, criaremos o método BuscaPorId.

      
        namespace Business
        {
          public class Pagina
          {
            public int Id { get;set };
            public string Nome { get;set };
            public string Conteudo { get;set };
            public DateTime Data { get;set };
          }
         
          public static object BuscaPorId(int id)
          {
            var pagina = new Pagina();
            var paginaDb = Database.Pagina();
            foreach(DataRow row in paginaDb.BuscaPorId().Rows)
            {
              pagina.Id = Convert.ToInt32(row["id"]);
              pagina.Nome = row["nome"].ToString();
              pagina.Conteudo = row["conteudo"].ToString();
              pagina.Data = Convert.ToDateTime(row["data"]);
            }
            return pagina;
          }

          public void Save() 
          {
            new Database.Pagina().Salvar(this.Id, this.Nome, this.Conteudo, this.Data);
          }
        } 
      
    

Na classe Database, teremos o código do método BuscaPorId, que retornará um DataTable referente ao Id que queremos alterar.

      
        namespace Database
        {
          public class Pagina
          {
            private string sqlConn() 
            {
              return ConfigurationManager,AppSettings["SqlConn"];
            }
  
            public DataTable BuscaPorId(int id) 
            {
              using (SqlConnection connection = new SqlConnection(SqlConn()))
              {
                string queryString = "select * from paginas where id=" + id;
                SqlCommand command = new SqlCommand(queryString, connection);
                command.Connection.Open();
                
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = command;
  
                DataTable table = new DataTable();
                adapter.Fill(table);
                return table;
  
              }
            }
          }
        }
       
     

Chamaremos o método Salve() na classe Business, que por sua vez, irá chamar o método Salvar() da classe Database.

      
        namespace Business
        {
          public void Save() 
          {
            new Database.Pagina().Salvar(this.Id, this.Nome, this.Conteudo, this.Data);
          }
        } 
      
    

Método Salvar da classe Database que ira executar a instrução update.

      
        namespace Database
        {
          public class Pagina
          {
  
            public void Salvar(int id, string nome, string conteudo, DateTime data) 
            {
              using (SqlConnection connection = new SqlConnection(connectionString))
  
              {
  
                string queryString = "insert into paginas(nome, data,conteudo) values 
                          ('"+nome +"','"+ data.ToString("yyyy-mm-dd hh:mm:ssss") +"','"+ conteudo +"')";
                if (id !=0)
                {
                  queryString = "update paginas set nome = '"+ nome +"', data = '" +  
                          data.ToString("yyyy-mm-dd hh:mm:ssss") + "',conteudo = '"+ conteudo +"' where id = " + id;
                }
                
                SqlCommand command = new SqlCommand(queryString, connection);
                command.Connection.Open();
                command.ExecuteNonQuery();
              }
            }
          }
        }
       
    

Podemos mostrar uma mensagem para o usuário de página alterada com sucesso. Caso ocorra um erro, também mostraremos uma mensagem de erro, utilizando o bloco try-catch.

      
        namespace MVC_GerenciadorDeConteudo.Controllers
        {
          public class PaginasController : Controller 

            [HttpPost]
            public void Alterar(int Id)
            {
              try 
              {
                var pagina = Pagina.BuscaPorId(id);

                DateTime data;
                DateTime.TryParse(Request["data"],out data);
                
                pagina.Nome =  Request["nome"];
                pagina.Data = Request["nome"];
                pagina.Conteudo = Request["nome"];
                pagina.save();

                TempData["sucesso"] = "Página alterada com sucesso";
              }
              catch 
              {
                TempData["erro"] = "Página não pode ser alterada";
              }
              Response.Redirect("/paginas");
            }
        }
       
    

Para mostrar a mensagem na tela, criaremos as tags div TempData["Sucesso"] e TempData["erro"] no arquivo Index.chtml.

      
        @{
          ViewBag.Title = "home Page";
          List< Business.Pagina> paginas = ViewBag.Paginas;
        }

        @if (TempData["Sucesso"] != null ){
          < div class="alert alert-success"> TempData["Sucesso"] < /div>
        }

        @if (TempData["erro"] != null){
          < div class="alert alert-danger"> TempData["erro"] < /div>
        }