Сетка кендо не обновляет данные
Версия 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> Search by Ingredient(s)</button>
<button onclick="ClearRec2IngrSearchGrid()" type="button" class="btn btn-info btn-xs"><i class="glyphicon glyphicon-retweet"></i> 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> 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;
}
}
Благодарю. Баба.