Jquery is returning undefined to one of the generic properties I created, to use with Bootgrid. I am trying to load a modal according to the click event of one of the buttons on the grid, but the modal opens without content. JQuery recognizes the data-action="Details" property, but the data-row-id="'+ row.id +'" property is returned as undefined. If anyone can please me, I appreciate it.
JQuery:
$(document).ready(configurarControles);
function configurarControles() {
var traducao = {
infos: "Exibindo {{ctx.start}} a {{ctx.end}} de {{ctx.total}} Projetos",
loading: "Carregando...",
noResults: "Nenhum projeto encontrado!",
refresh: "Atualizar",
search: "Pesquisa"
};
var grid = $("#gridProjetos").bootgrid(
{
ajax: true,
url: "@Url.Action("Listar")",
labels: traducao,
searchSettings: {
characters: 4
},
formatters: {
"acoes": function(column, row) {
return '<a href="javascript:void(0)" class="btn btn-info" data-acao="Details" data-row-id="' + row.id + '"><span class="glyphicon glyphicon-list"></span></a> ' +
'<a href="javascript:void(0)" class="btn btn-warning" data-acao="Edit" data-row-id="' + row.id + '"><span class="glyphicon glyphicon-edit"></span></a> ' +
'<a href="javascript:void(0)" class="btn btn-danger" data-acao="Delete" data-row-id="' + row.id + '"><span class="glyphicon glyphicon-trash"></span></a>';
}
}
});
grid.on("loaded.rs.jquery.bootgrid", function () {
grid.find("a.btn").each(function (index, elemento) {
var botaoDeAcao = $(this);
var acao = botaoDeAcao.data("acao");
var idEntidade = botaoDeAcao.data("row-id");
botaoDeAcao.on("click", function () {
alert(acao);
alert($(this).data("row-id"));
abrirModal(acao, idEntidade);
});
});
});
Controller:
[HttpPost]
public JsonResult Listar(string searchPhrase, int current, int rowCount)
{
// Pega a chave com o campo a ser ordenado e a ordenação
string chave = Request.Form.AllKeys.Where(c => c.StartsWith("sort")).First();
string ordenacao = Request[chave];
string campo = chave.Replace("sort[", string.Empty).Replace("]", string.Empty);
// Cria uma lista de simples de projetos, com as propriedades das classes relacionadas,
// para evitar problemas com o Bootgrid.
var projetos = db.Projetos.Select(p => new { ProjetoId = p.ProjetoId, Tema = p.Tema, Resumo = p.Resumo, Autor = p.Autor,
Telefone = p.Telefone, AreaId = p.AreaId, NomeArea = p.Area.NomeArea,
SubAreaId = p.SubAreaId, NomeSubArea = p.SubArea.NomeSubArea });
int total = projetos.Count();
//Efetua a pesquisa dinâmica em todos os campos da lista, através do parâmetro "searchPhrase", passado pelo Boosgrid.
if (!string.IsNullOrWhiteSpace(searchPhrase))
{
projetos = projetos.Where("NomeArea.Contains(@0) OR NomeSubArea.Contains(@0) OR Tema.Contains(@0)OR Autor.Contains(@0)", searchPhrase);
}
// Formatando a string para a expressão lambda
string campoOrdenacao = string.Format("{0} {1}", campo, ordenacao);
var projetosPaginados = projetos.OrderBy(campoOrdenacao).Skip((current - 1) * rowCount).Take(rowCount);
return Json(new
{
rows = projetosPaginados.ToList(),
current = current,
rowCount = rowCount,
total = total
}, JsonRequestBehavior.AllowGet);
}