在ASP.net MVC 3中Telerik Grid Ajax绑定问题

时间:2014-09-08 23:51:09

标签: ajax asp.net-mvc telerik

我有一个使用Telerik ASP.net MVC Grid的项目。在MVC 2中,一切正常,包括Ajax绑定中的View和Ajax绑定中的部分网格视图。但是在升级到MVC 3之后,部分View中的网格在Ajax绑定中不起作用(dataBinding.Ajax()中的控制方法。不能调用Select())。但是,普通View中的网格工作正常。我想知道是什么原因。

我知道在MVC 3中,MicrosoftAjax.js,MicrosoftMvcAjax.js,MicrosoftMvcValidation.js等已经过时。它们的函数被jquery.unobtrusive-ajax.js,jquery.validate.js和jquery.validate.unobtrusive.js取代。但是在我将它们包含在项目中之后,它仍然不起作用。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在页面上,有一些标签被点击,它将在部分视图中显示网格。代码如下,

Tab:
tabstrip.Add()
.Text(Shared.MaintenanceStrings.Tab_Results)
.HtmlAttributes(new { @class = "tab", url = "/Maintenance/AthletesResults/", tabNumber = "6" })
...
.ClientEvents(e => e.OnSelect("onTabSelect"))
.SelectedIndex(0)
...

function onTabSelect(e)
{         
var resourceId = $('#resourceId').val();
tabContentUrl = '/Maintenance/AthletesResults/' + resourceId;

$.ajax(
{
type: "POST",
url: tabContentUrl,
data: { id: resourceId, editable: 'true' },
success: function (data)
{
//reload the details content tab
$("#TabStrip-" + 6).html(data);
}                   
});
}

The grid to be displayed after tab is clicked,
Html.Telerik().Grid<MaintenanceAthletesResultsViewModel>()
.Name("Results")
...
.DataBinding(dataBinding => dataBinding.Ajax()
.Select("AthletesResultsAjax", "Maintenance")
.Update("UpdateAthletesResults", "Maintenance")
.Insert("InsertAthletesResults", "Maintenance")
.Delete("DeleteAthletesResults", "Maintenance")
)
.Pageable(paging => paging.PageSize(10))
.Scrollable(scrolling => scrolling.Height(290))
.EnableCustomBinding(true)
.Sortable()
.Filterable()
...

The controller action to go to after tap is clicked (Specified in url), 
public ActionResult AthletesResults(string id, bool editable)
{
this._resourceBL.PopulateMaintenanceResourcesViewData(ViewData, id, this.SelectedSport());

MaintenanceEditableViewModel model = new MaintenanceEditableViewModel { Editable = editable };
model.CurrentLanguageCode = this.CurrentLanguageCode();

return PartialView(model);
}

Grid Ajax Binding
[GridAction]
public ActionResult AthletesResultsAjax(string id)
{
List<MaintenanceAthletesResultsViewModel> model = null;

if (!string.IsNullOrEmpty(id))
{
model = this._resourceBL.GetMaintenanceAthletesResultsViewModel(int.Parse(id));
}

return View(new GridModel(model));
}