Сетка кендо не обновляет данные

Версия KendoUI: 2013.3.1316.545 ОС: Windows 8 .NET: 4.5/C#

У меня есть MultiSelect и сетка на RazorView. Мое намерение состоит в том, чтобы позволить пользователям вводить несколько элементов в поле множественного выбора и, когда они нажимают кнопку, искать эти элементы в базе данных и отображать их в сетке ниже, добавляя выбранные элементы из множественного выбора в строку и передавая эту строку в мой контроллер действия.

Все это отлично работает с первого раза. Если пользователь изменяет элементы в множественном выборе и затем нажимает кнопку поиска, я воссоздаю строку запроса и вызываю действие моего контроллера из обработчика событий нажатия кнопки. Я использую следующий код для перезагрузки данных.

    var dSource = $( grid ).data( 'kendoGrid' ).dataSource;
    dSource.transport.options.read.url = newUrl;
    dSource.read();

Хотя в отладчике я вижу, что функция dSource.read() выполняется. Но вызов никогда не попадает в мой метод действия после первого вызова. Если я полностью обновлю страницу и перезвоню, это сработает. Я предполагаю, что источник данных кэшируется и никогда не выполняется снова, хотя строка запроса в URL изменилась. Как бы я заставить это работать? Любая помощь высоко ценится.

Вот все Посмотреть код:

<div class="PCSectionPaddingTop5">
<form role="form">
    <div class="form-group">
        <label><span class="label label-danger">Ingredient(s)</span></label>
    </div>
    <div class="form-group">
        @(Html.Kendo().MultiSelect()
                    .Name( "IngredientMultiSelect" )
                    .DataTextField( "Name" )
                    .DataValueField( "PKGuid" )
                    .Placeholder( "Select Ingredients..." )
                    .Filter( Kendo.Mvc.UI.FilterType.Contains )
                    .AutoBind( true )
                    .DataSource( ds => ds
                         .Read( r => r.Action( "GetAllIngredients", "Ingredient" ).Type( HttpVerbs.Post ) )
                    ))
    </div>
    <div class="form-group">
        <button onclick="ReloadRec2IngrSearchGrid()" type="button" class="btn btn-info btn-xs"><i class="glyphicon glyphicon-search"></i>&nbsp;Search by Ingredient(s)</button>
        <button onclick="ClearRec2IngrSearchGrid()" type="button" class="btn btn-info btn-xs"><i class="glyphicon glyphicon-retweet"></i>&nbsp;Reset</button>
    </div>
    <div class="form-group">
        @(Html.Kendo()
                    .Grid<PowerChef.DAL.ViewModels.RecipeVM>()
                    .Name( "Recipe2IngrSearchKGrid" )
                    .Pageable()
                    .Scrollable()
                    .Sortable()
                    .Filterable()
                    .Resizable( resize => resize.Columns( true ) )
                    .Editable( ed => ed.Mode( GridEditMode.InLine ) )
                    .Columns( c =>
                    {
                        //c.Bound(x => x.PKId).Hidden(true);
                        c.Bound( x => x.PKGuid ).Hidden( true );
                        c.Bound( x => x.Name ).Title( "Name" );
                        c.Bound( x => x.Included ).Width( "20%" ).Sortable( false ).Filterable( false ).Title( "Include" )
                             .ClientTemplate( "<input type='checkbox' #= Included === true ? checked='checked' : '' # class='chkbx' />" );
                    }
                    )
                    .AutoBind( false )
                    .DataSource( ds => ds
                         .Ajax()
                         .ServerOperation( true )
                         .Read( r => r.Action( "GetRecipe2IngrSearchRecipes", "CustomerMenu", new { selectedIngrs = "" } ).Type( HttpVerbs.Post ) )
                         .Model( m =>
                         {
                             //m.Id(d => d.PKId);
                             //m.Field(d => d.PKId).DefaultValue(-1);
                             m.Id( d => d.PKGuid );
                             m.Field( d => d.PKGuid ).DefaultValue( new Guid() );
                         } )
                         .PageSize( 20 )
                    ))
    </div>
    <div class="form-group">
        <div class="pull-right">
            <button onclick="submitRec2IngrKGridSelection()" type="button" class="btn btn-info btn-xs"><i class="glyphicon glyphicon-download"></i>&nbsp;Finish Selection</button>
        </div>
    </div>
</form>

и вот мои методы javascript:

function ReloadRec2IngrSearchGrid() {

try {
    if ( !_.isUndefined( $( "#IngredientMultiSelect" ) ) && !_.isNull( $( "#IngredientMultiSelect" ).data( "kendoMultiSelect" ) ) && !_.isEmpty( $( "#IngredientMultiSelect" ).data( "kendoMultiSelect" ).value() ) ) {
        var parmValues = $( "#IngredientMultiSelect" ).data( "kendoMultiSelect" ).value();
        var parmName = "ingrId";
        ReloadDataSourceForGrid( "#Recipe2IngrSearchKGrid", parmName, parmValues );
    }
    else {
        PcGfShowNotification( 'error', "Error", "Invalid Parameter!" );
    }
} catch ( e ) {
    PcGfShowNotification( 'error', "Error", PcGvMsgTechFailure );
}

}

Больше JavaScript:

function ReloadDataSourceForGrid( grid, parmName, parmValues ) {
try {
    var kGridUrl = $( grid ).data( 'kendoGrid' ).dataSource.transport.options.read.url;
    var newUrl = PCAddQueryStringValueArrayToURL( kGridUrl, parmName, parmValues );
    var dSource = $( grid ).data( 'kendoGrid' ).dataSource;
    dSource.transport.options.read.url = newUrl;
    dSource.read();
    //$( grid ).data( 'kendoGrid' ).dataSource.transport.options.read.url = newUrl;
    //$( grid ).data( 'kendoGrid' ).dataSource.read();
} catch ( e ) {
    throw e;
}

}

Благодарю. Баба.

0 ответов

Другие вопросы по тегам