Nesta aula iremos aprender como alterar os dados listados no banco de dados em um formulário utilizando ASP.Net MVC.
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>
}
Nesta aula iremos aprender como alterar os dados listados no banco de dados em um formulário utilizando ASP.Net MVC.
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>
}