Nesta aula iremos aprender a criar um formulário em HTML e mandar os dados via POST para um sistema em ASP.Net MVC.
O objetivo da aula de hoje é fazer um formulário e começar a gravar os dados diretamente na base de dados.
Primeiro vamos utilizar algumas técnicas do HTML para criarmos um formulário simples, com o nome, conteudo, como um textArea e data. Criar um botão chamado ok para que possamos enviar os dados para o servidor e gravar os dados na base de dados, retornando esse dado já escrito e assim nós retornaremos esse registro na view.
Então vamos criar uma nova rota para fazer o cadastro e renderizar a View e também criar novo controller chamado Paginas.
namespace MVC_GerenciadorDeConteudo.Controllers
{
public class PaginasController : Controller
public ActionResult Index()
{
ViewBag.Paginas = new Pagina().Lista();
return View();
}
public ActionResult Novo()
{
return View();
}
}
Faremos um link HTML para que possamos ir para o cadastro de páginas.
@{
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>
< /tr>
@foreach (var p paginas)
{
< tr>
< td>@p.Id < /td>
< td>@p.Nome < /td>
< td>@p.Data < /td>
< /tr>
}
< /table>
< /div>
No arquivo de rotas teremos as rotas de paginas, a Index e Novo
routes.MapRoute(
"paginas",
"paginas",
new { controller = "Paginas", action = "Index" }
);
routes.MapRoute(
"paginas_novo",
"npaginas/novo",
new { controller = "Paginas", action = "Novo" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Criaremos um novo formulário no arquivo novo.cshtml:
No arquivo de rotas inserimos a nova rota chamada paginas_criar
routes.MapRoute(
"paginas_criar",
"npaginas/criar",
new { controller = "Paginas", action = "Criar" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Em PaginasController, vamos criar o método Criar e a assinatura como [HttpPost].
Nesta caso, ao invés de termos um ActionResult, colocaremos o método como void, ou seja, não precisamos de retorno e, assim que terminar a ação, daremos um redirect para /paginas.
namespace MVC_GerenciadorDeConteudo.Controllers
{
public class PaginasController : Controller
public ActionResult Index()
{
ViewBag.Paginas = new Pagina().Lista();
return View();
}
public ActionResult Novo()
{
return View();
}
[HttpPost]
public void Criar()
{
DateTime data;
DateTime.TryParse(Request["data"],out data);
var pagina = new Pagina();
pagina.Nome = Request["nome"];
pagina.Data = Request["nome"];
pagina.Conteudo = Request["nome"];
pagina.save();
Response.Redirect("/paginas");
}
}
Na classe Business, vamos criar o método Save, que irá chamar o método Salvar na classe Database.
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 List< Pagina> Lista()
{
var lista = new List< Pagina();
var paginaDb = Database.Pagina()
foreach(DataRow row in paginaDb.Lista().Rows)
{
var pagina = new Produto();
pagina.Id = Convert.ToInt32(row["id"]);
pagina.Nome = row["nome"].ToString();
pagina.Conteudo = row["conteudo"].ToString();
pagina.Data = Convert.ToDateTime(row["data"]);
lista.Add(pagina);
}
return lista;
}
public void Save()
{
new Database.Pagina().Salvar(this.Id, this.Nome, this.Conteudo, this.Data);
}
}
Na classe Database criaremos o método Salvar, para gravar as informações no banco de dados.
namespace Database
{
public class Pagina
{
private string sqlConn()
{
return ConfigurationManager,AppSettings["SqlConn"];
}
public DataTable Lista()
{
using (SqlConnection connection = new SqlConnection(SqlConn()))
{
string queryString = "select * from paginas";
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;
}
}
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();
}
}
}
}
Nesta aula iremos aprender a criar um formulário em HTML e mandar os dados via POST para um sistema em ASP.Net MVC.
O objetivo da aula de hoje é fazer um formulário e começar a gravar os dados diretamente na base de dados.
Primeiro vamos utilizar algumas técnicas do HTML para criarmos um formulário simples, com o nome, conteudo, como um textArea e data. Criar um botão chamado ok para que possamos enviar os dados para o servidor e gravar os dados na base de dados, retornando esse dado já escrito e assim nós retornaremos esse registro na view.
Então vamos criar uma nova rota para fazer o cadastro e renderizar a View e também criar novo controller chamado Paginas.
namespace MVC_GerenciadorDeConteudo.Controllers
{
public class PaginasController : Controller
public ActionResult Index()
{
ViewBag.Paginas = new Pagina().Lista();
return View();
}
public ActionResult Novo()
{
return View();
}
}
Faremos um link HTML para que possamos ir para o cadastro de páginas.
@{
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>
< /tr>
@foreach (var p paginas)
{
< tr>
< td>@p.Id < /td>
< td>@p.Nome < /td>
< td>@p.Data < /td>
< /tr>
}
< /table>
< /div>
No arquivo de rotas teremos as rotas de paginas, a Index e Novo
routes.MapRoute(
"paginas",
"paginas",
new { controller = "Paginas", action = "Index" }
);
routes.MapRoute(
"paginas_novo",
"npaginas/novo",
new { controller = "Paginas", action = "Novo" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Criaremos um novo formulário no arquivo novo.cshtml:
No arquivo de rotas inserimos a nova rota chamada paginas_criar
routes.MapRoute(
"paginas_criar",
"npaginas/criar",
new { controller = "Paginas", action = "Criar" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Em PaginasController, vamos criar o método Criar e a assinatura como [HttpPost].
Nesta caso, ao invés de termos um ActionResult, colocaremos o método como void, ou seja, não precisamos de retorno e, assim que terminar a ação, daremos um redirect para /paginas.
namespace MVC_GerenciadorDeConteudo.Controllers
{
public class PaginasController : Controller
public ActionResult Index()
{
ViewBag.Paginas = new Pagina().Lista();
return View();
}
public ActionResult Novo()
{
return View();
}
[HttpPost]
public void Criar()
{
DateTime data;
DateTime.TryParse(Request["data"],out data);
var pagina = new Pagina();
pagina.Nome = Request["nome"];
pagina.Data = Request["nome"];
pagina.Conteudo = Request["nome"];
pagina.save();
Response.Redirect("/paginas");
}
}
Na classe Business, vamos criar o método Save, que irá chamar o método Salvar na classe Database.
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 List< Pagina> Lista()
{
var lista = new List< Pagina();
var paginaDb = Database.Pagina()
foreach(DataRow row in paginaDb.Lista().Rows)
{
var pagina = new Produto();
pagina.Id = Convert.ToInt32(row["id"]);
pagina.Nome = row["nome"].ToString();
pagina.Conteudo = row["conteudo"].ToString();
pagina.Data = Convert.ToDateTime(row["data"]);
lista.Add(pagina);
}
return lista;
}
public void Save()
{
new Database.Pagina().Salvar(this.Id, this.Nome, this.Conteudo, this.Data);
}
}
Na classe Database criaremos o método Salvar, para gravar as informações no banco de dados.
namespace Database
{
public class Pagina
{
private string sqlConn()
{
return ConfigurationManager,AppSettings["SqlConn"];
}
public DataTable Lista()
{
using (SqlConnection connection = new SqlConnection(SqlConn()))
{
string queryString = "select * from paginas";
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;
}
}
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();
}
}
}
}