Похоже, что проблема возникла из s
, который назначен отправителю кнопки в этом блоке вместо GridView
строка:
Html.DevExpress().Button(b =>
{
b.Name = "btnVE" + c.KeyValue;
b.Text = "V/E";
b.ClientSideEvents.Click =
"function(s, e) { document.location='" + DevExpressHelper.GetUrl(new { Controller = "ViewPrincipal", Action = "EditRecord" })
+ "?key=' + s.GetRowKey(e.visibleIndex); }"; // ==> 's' refers to button object as sender
}).GetHtml();
То, что вы должны использовать, это GridViewDataItemTemplateContainer
объект, чтобы получить KeyValue
свойство для соответствующей строки, которое возвращает целочисленное значение из GridViewBaseRowTemplateContainer
:
column.SetDataItemTemplateContent((c) =>
{
Html.DevExpress().Button(b =>
{
b.Name = "btnVE" + c.KeyValue;
b.Text = "V/E";
b.UseSubmitBehavior = false; // prevent default submit action
b.EnableClientSideAPI = true; // add this line if not sure
b.ClientSideEvents.Click =
"function(s, e) { window.location = '" + DevExpressHelper.GetUrl(new { Controller = "ViewPrincipal", Action = "EditRecord" })
+ "?key=" + c.KeyValue.ToString() + "'; }";
}).GetHtml();
});
или с использованием string.Format()
, который легче читать:
b.ClientSideEvents.Click = string.Format("function(s, e) {{ window.location = '{0}?key={1}'; }}",
DevExpressHelper.GetUrl(new { Controller = "ViewPrincipal", Action = "EditRecord" }),
c.KeyValue.ToString());
Примечания:
1) Если вы хотите получить индекс строки, используйте c.VisibleIndex
.
2) Для кросс-браузерной работы я предпочел от window.location
до document.location
, как указано здесь .
Проблема, связанная с данной: GridView - Как определить кнопку внутри сетки