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
        }
    });
}
Другие вопросы по тегам