Devexpress MVC5 Grid GetRowKey(e.visibleIndex) всегда возвращает ноль
Привет всем, я пытаюсь получить первичный ключ выбранной строки, чтобы отправить его на сервер позже вот код: Это главная страница
<script type="text/javascript">
function OnRowClick(s, e) {
var grid = MVCxClientGridView.Cast(s);
var key = grid.GetRowKey(e.visibleIndex);
console.log(key);
$.ajax({
url: '@Url.Action("FundDetails", "Fund")',
type: "POST",
dataType: "text",
traditional: true,
data: { rowKey: key },
success: function (data) {
console.log(data);
},
error: function (xhr, textStatus, errorThrown) {
alert('Request Status: ' + xhr.status + '; Status Text: ' + textStatus +
'; Error: ' + errorThrown);
}
});
}
</script>
<div>
@Html.Partial("_FundsList", Model)
</div>
И это частичное представление, которое содержит сетку
@Html.DevExpress().GridView(settings =>
{
settings.Name = "FundGrid";
settings.CallbackRouteValues = new { Controller = "Fund", Action =
"FundsList" };
settings.Width = 450;
settings.Columns.Add("codeIsin");
settings.Columns.Add("fundLabel");
settings.Columns.Add("variation");
settings.Columns.Add("ClassNiv1");
settings.SettingsBehavior.AllowSelectByRowClick = true;
settings.SettingsBehavior.AllowSelectSingleRowOnly = true;
settings.ClientSideEvents.RowClick = "OnRowClick";
}).Bind(Model).GetHtml()
проблема в том, что значение ключа всегда равно нулю:
var key = grid.GetRowKey (e.visibleIndex); ==> всегда ноль
PS: e.visibleIndex не является нулевым.
1 ответ
GetRowKey
Метод объясняет, как возвращается нулевое значение:
Если индекс, переданный через параметр visibleIndex, неверен или свойство ASPxGridBase.KeyFieldName не установлено, возвращается значение null.
Возможно, вам нужно установить KeyFieldName
который ссылается на первичный ключ и / или поле идентификатора (с уникальным значением) в GridView
, как этот пример:
@Html.DevExpress().GridView(settings =>
{
settings.Name = "FundGrid";
settings.CallbackRouteValues = new { Controller = "Fund", Action = "FundsList" };
settings.Width = 450;
settings.Columns.Add("codeIsin");
settings.Columns.Add("fundLabel");
settings.Columns.Add("variation");
settings.Columns.Add("ClassNiv1");
// set primary/identity key field to determine selected row index
settings.KeyFieldName = "codeIsIn";
settings.SettingsBehavior.AllowSelectByRowClick = true;
settings.SettingsBehavior.AllowSelectSingleRowOnly = true;
settings.ClientSideEvents.RowClick = "OnRowClick";
}).Bind(Model).GetHtml()
Также вы можете поставить проверку на нулевое значение с помощью if
условие перед выполнением вызова AJAX, чтобы убедиться, что значение ключевого поля передано правильно:
var key = grid.GetRowKey(e.visibleIndex);
if (key != null)
{
$.ajax({
url: '@Url.Action("FundDetails", "Fund")',
type: "POST",
data: { rowKey: key },
// other AJAX settings
success: function (data) {
// do something
},
error: function (xhr, textStatus, errorThrown) {
// error handling
}
});
}