Array
(
)

Cenário detalhado - ASP.NET MVC CSHARP PASSAGEM DE PARAMETRO NO @HTML.ACTIONLINK

Jobson Lira
|
MVP
    20 abr 2016

Joguei a toalha. Uma rotina que chega a ser elementar estou apanhando por não conhecer o comportamento dos scripts.
caso um:
Preciso passar para um @Html.ActionLink um parâmetro originado de uma variável que pega o valor de um @Html.DropDownList, tenho tentado fazer com ajax, mas não estou conseguindo finalizar. O valor é passado em branco! ou é passado embutido no link como parâmetro fixo, conforme abaixo.
caso dois:
Este é o caso ideal
Através de um button tento passar o valor selecionado do @Html.DropDownList através do evento onclick do botão, mas não funciona nem a pau
Se me explicarem as duas rotinas, tanto do actionlink pelo script e do button pelo ajax ou jquery, agradeço muitissimo!
Segue o codigo , isso é só um recorte para explicar o problema:
public class Cidade
{
[Key]
public int CidadeId { get; set; }
public string Nome { get; set; }
public List<Cidade> ListaCidades()
{
return new List<Cidade>
{
new Cidade{CidadeId = 1, Nome = "Cidade 01"},
new Cidade{CidadeId = 2, Nome = "Cidade 02"},
new Cidade{CidadeId = 3, Nome = "Cidade 03"}
};
}
}
CONTROLLERS--------------------------------------
public ActionResult Index()
{
ViewBag.CidadeId = new SelectList
(
new Cidade().ListaCidades(),
"CidadeId",
"Nome"
);
return View();
}
public ActionResult Pagina2(string id)
{

ViewBag.Msg = "Parametro transferido " + id;
return View();
}
VIEW-------------------------------------------------------
@model IEnumerable<EventosDiversos.Models.Cidade>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script type="text/javascript">
$(document).ready(function () {
//Esta rotina serve apenas para inspeção
//e para mostrar a cidade selecionada
$('#CidadeId').change(function () {
apontarSelecao();
});
function apontarSelecao() {
var ck = $('#CidadeId option:selected').text();
var cki = $('#CidadeId option:selected').val();
checa.innerHTML = "Checagem:" + ck;
txtId.innerHTML = cki;
}
// fim da inspeção

//A rotina abaixo é a situação ótima é o que realmente quero
//mas não consigo evoluir e passar o link com a variavel
//para a pagina2.
//Tentei fazer com ajax, mas uma rotina com jquery tbm resolve
$(".btnEnviar").on("click", (function () {
var _data = $('#CidadeId option:selected').val();
//alert(_data);
$.ajax({
type: 'get',
url: '/home/pagina2',
data: _data,
success:function(data) {
alert(data);
}
});
}));
})
</script>

</head>
<body>
<div>
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="row">
@Html.DropDownList("CidadeId", String.Empty)
<input type="button" value="Enviar" class="btnEnviar btn-default" />
</div>

//No linkador abaixo consigo chamar a pagina com o id fixo "3" mas não
//consigo trazer o Id da cidade selecionada no DropDown para que seja passado
//como parametro. Tento abastecer uma variavel no script acima e traze-la para cá
//não estou sabendo como.
@Html.ActionLink("Chamar a Pagina2 >>", "Pagina2", new { id = "3" }, new { id = "linkador", name = "linkador" })
}
</div>
<div>
<hr />
</div>
<div>
<hr />
<h1>Inspeção</h1>
<h2 id="checa">Checagem:</h2>
<h2 id="txtId"></h2>
</div>
</body>
</html>
VIEW PAGINA2----------------------------
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Pagina2</title>
</head>
<body>
<div>
<h2>Passagem do parametro</h2>
<p>O codigo é: @ViewBag.Msg </p>
</div>
@Html.ActionLink("Voltar","Index",null,"")
</body>
</html>