Como pegar parametro ID passado pra url?

13/03/2019

0

Boa Tarde pessoal,
Sou novato em asp.net mvc, estou tentando pegar um parametro "id" passado pra fazer um insert no banco, já tentei o ""request.string["id"]"" porém vem nulo, teria alguma coisa a ver com as minhas rotas? minha url (http://localhost:57221/Movimentacao/Create/79)

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


public ActionResult InserirMovimento(int? id, int id_unidadeorigem,int id_unidadedestino,DateTime dt_movimentacao,int id_area,int id_funcao,DateTime dt_registro,string obs)
{



//var txt = Request.QueryString["id"].ToString();

var strQuery = "";



strQuery += "INSERT INTO movimentacao (id ,id_unidadeorigem,id_unidadedestino,dt_movimentacao,id_area,id_funcao,dt_registro,obs) ";

strQuery += string.Format(" VALUES('','','','','','','','')", txt, id_unidadeorigem, id_unidadedestino, dt_movimentacao, id_area, id_funcao, dt_registro, obs);

using (CadastroController bd = new CadastroController())
{


bd.ExecutaComando(strQuery);

}
return RedirectToAction("Index");
}




Agradeço a atenção....
Alain Aranha

Alain Aranha

Responder

Posts

18/03/2019

Renato Dias

Fala Alain! O MVC é baseado em Modelos. Quando você tem um método em que precisa passar um id, como um método para alterar, no seu controller você tem que ter dois métodos um public ActionResult normal, que será um GET e vai exibir, por exemplo o formulário para passar os dados, e outro método de mesmo nome, mas com o atributo [HttpPost] e passando como parâmetro o bind do seu modelo. Vou dar um exemplo: Tenho na minha pasta Models uma classe Pessoa, que será o meu modelo. Já criei um contexto para persistir minha classe Pessoa no banco de dados. No controller PessoasController para alterar uma Pessoa terei dois métodos o primeiro:
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Pessoa pessoa = db.Pessoas.Find(id);
if (pessoa == null)
{
return HttpNotFound();
}
return View(pessoa);
}
Este método é um GET que recebe a id passada através da rota: Pessoas/Edit/. Se o id for nulo retorna como resultado BadRequest, se não busca a pessoa por id em nosso contexto: Pessoa pessoa = db.Pessoas.Find(id) e armazena em um objeto pessoa. Se pessoa for nulo retorna como não encontrado, se não retorna os dados da pessoa em nossa View.
O segundo método:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "PessoaId,Nome,Sexo,Nascimento")] Pessoa pessoa)
{
if (ModelState.IsValid)
{
db.Entry(pessoa).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(pessoa);
}
Neste segundo método Edit, passamos o atributo [HttpPost] para receber os dados do formulário após o clique do botão. Os Parâmetros [Bind(Include = "PessoaId,Nome,Sexo,Nascimento")] Pessoa pessoa, passam os dados incluídos no formulário para nossa classe pessoa. O código verifica se o estado da classe é válido. Se for válido: db.Entry(pessoa).State = EntityState.Modified, este código passa esta classe pessoa com os dados alterados através de nosso contexto para o registro correspondente no banco de dados. O código : db.SaveChanges(), persiste os dados no banco de dados. E o código return RedirectToAction("Index"), nos direciona para a action Index de nosso Controller, que exibe todas as pessoas que já foram gravadas no banco de dados na respectiva View. O código return View(pessoa), retorna a View de nosso formulário caso não tenham sido incluídos dados e o estado de nossa classe não for válido.
Espero que o exemplo tenha sido de ajuda.

Responder

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

Aceitar