Обновление DevExpress MVC GridView

Мне нужно обновить DevExpress GridView в функции успеха ajax после операции. Я использую метод gridName.Refresh(), но javascript выдает ошибку «udefined is not a function». Но когда я пишу этот метод в окно консоли Google Chrome, он работает нормально. В чем проблема? Кроме того, мои коды javascript находятся в другом файле JavaScript, а не среди html-кодов.

Это мои коды jquery ajax, которые находятся в отдельном файле javascript.

function sendToMethod(url) {
    $.ajax({
        type: 'GET',
        url: url,
        contentType: 'application/html; charset=utf-8',
        datatype: 'html'
    })
    .success(function (result) {
        onCloseClick();
        gv_locations.UnselectRows();//gv_locations is not defined
        gv_locations.Refresh();//there is the same error here too
    })
    .error(function (result) {

    });
}

Это мой файл GridViewPartial.cshtml

@Html.DevExpress().GridView(g =>
{
    g.Name = "gv_locations";
    g.KeyFieldName = "PublicIP";
    g.SettingsPager.PageSize = 21;
    g.Width = System.Web.UI.WebControls.Unit.Percentage(100);
    g.ClientSideEvents.SelectionChanged = "onGridSelectionChanged";
    g.SettingsEditing.Mode = GridViewEditingMode.EditFormAndDisplayRow;

    g.CommandColumn.Visible = true;
    g.Settings.ShowGroupPanel = true;
    g.CommandColumn.ShowEditButton = true;
    g.CommandColumn.ShowDeleteButton = true;
    g.CommandColumn.ShowSelectCheckbox = true;
    g.SettingsBehavior.AllowFocusedRow = true;
    g.CallbackRouteValues = new { Controller = "Location", Action = "LocationGridViewPartial", id = ViewBag.Type };

    g.SettingsEditing.UpdateRowRouteValues = new { Controller = "Location", Action = "LocationGridViewInlineUpdate" };
    g.SettingsEditing.DeleteRowRouteValues = new { Controller = "Location", Action = "LocationGridViewInlineDelete" };

    g.Columns.Add(column =>
    {
        column.Caption = "Client";
        column.FieldName = "ClientID";
        column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False;
    });

    g.Columns.Add(column =>
    {
        column.Caption = "IP";
        column.FieldName = "PublicIP";
        column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False;
    });

    g.Columns.Add("PublicIPName", "Lokasyon Adı");

    g.Columns.Add(column =>
    {
        column.Caption = "Konum Tipi";
        column.FieldName = "SelectedLocationTypeID";
        column.ColumnType = MVCxGridViewColumnType.ComboBox;
        var comboBoxProperties = column.PropertiesEdit as ComboBoxProperties;
        comboBoxProperties.DataSource = AtomicAdminPanel.Models.External.Location.LocationDataProvider.GetLocationTypes();
        comboBoxProperties.TextField = "SelectedLocationTypeName";
        comboBoxProperties.ValueField = "SelectedLocationTypeID";
    });

    g.Columns.Add(column =>
    {
        column.Caption = "Oluşturan";
        column.FieldName = "CreatedUser";
        column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False;
    });

    g.Columns.Add(column =>
    {
        column.Caption = "Oluşturma Tarihi";
        column.FieldName = "CreatedDateTime";
        column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False;
    });

    g.Columns.Add(column =>
    {
        column.Caption = "Değiştiren";
        column.FieldName = "ChangedUser";
        column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False;
    });

    g.Columns.Add(column =>
    {
        column.Caption = "Değiştime Tarihi";
        column.FieldName = "ChangedDateTime";
        column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.False;
    });

    g.Columns.Add("IsActive", "Aktif", MVCxGridViewColumnType.CheckBox);

    MVCxGridViewColumn col_listType = new MVCxGridViewColumn("LocationListType");
    col_listType.Visible = false;

    if (ViewBag.Id == "Online")
    {
        MVCxGridViewColumn col_online = new MVCxGridViewColumn("IsOnline", "Çevrimiçi", MVCxGridViewColumnType.Image);
        col_online.SetDataItemTemplateContent(c =>
        {
            ViewContext.Writer.Write("<img src='../../Content/Image/statusOnline.png'/>");
        });
        g.Columns.Add(col_online);
    }
}).Bind(Model).GetHtml()

person Aykut Demirci    schedule 11.10.2014    source источник
comment
Я думаю, вы должны показать код.   -  person Zabavsky    schedule 11.10.2014
comment
Я написал свои коды в качестве ответа. Потому что мои коды слишком длинные и не подходят сюда :)   -  person Aykut Demirci    schedule 13.10.2014
comment
Ошибка говорит, что gv_locations не определено. Находится ли файл javascript на той же странице, что и GridView?   -  person Zabavsky    schedule 16.10.2014
comment
Не время проектирования. Потому что Devexpress говорит, что страница, которая включает в себя gridview, не содержит других кодов html или javascript. Вы должны отделить страницу, содержащую GridView. Другие функции в том же файле javascript отлично работают для GridView.   -  person Aykut Demirci    schedule 16.10.2014
comment
Я имею в виду страницу браузера, а не частичный вид, где находится сетка. Вы имеете в виду, что функции работают нормально для того же gv_locations GridView?   -  person Zabavsky    schedule 16.10.2014
comment
да. Но есть странность. Когда я пишу gv_locations.Refresh(); метод в окно консоли Google Chrome, он работает.   -  person Aykut Demirci    schedule 16.10.2014
comment
нет ответа? Пожалуйста помогите   -  person Aykut Demirci    schedule 17.10.2014
comment
Кто-нибудь имеет представление об этой проблеме?   -  person Aykut Demirci    schedule 20.10.2014
comment
Вы используете этот метод ajax для рендеринга сетки? или вы просто обновляете уже обработанную сетку в случае успеха ajax?   -  person Krishjs    schedule 13.11.2014
comment
Спасибо за ответы. Я понял   -  person Aykut Demirci    schedule 14.11.2014


Ответы (1)


Прежде всего, вы должны написать window.gv_locations, а затем убедиться, что представление, содержащее js-скрипт, видит эту сетку (представление должно содержать сетку и скрипт). Дайте мне ответ, если это работает.

person Adrian Tarnowski    schedule 18.06.2015
comment
Если gv_locations не определено, оно все равно будет неопределенным при обращении к нему как window.gv_locations. - person Sнаđошƒаӽ; 12.04.2019