Devexpress MVC5 Grid GetRowKey (e.visibleIndex) всегда возвращает ноль - PullRequest
0 голосов
/ 30 апреля 2018

Привет всем, я пытаюсь получить первичный ключ выбранной строки, чтобы отправить его на сервер позже, вот код: Это главная страница

     <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); ==> всегда Null

PS: e.visibleIndex не равно нулю.

1 Ответ

0 голосов
/ 30 апреля 2018

Метод GetRowKey объясняет, как возвращается нулевое значение:

Если индекс, переданный через параметр visibleIndex, неверен, или Свойство ASPxGridBase.KeyFieldName не установлено , возвращается ноль.

Возможно, вам нужно установить 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
        }
    });
}
...