У нас была та же проблема, что и у вас.Мы проанализировали исходный код для контроллера WebGrid и, по-видимому, ошибка существует и не может быть изменена, поскольку она жестко закодирована:
Взята из "mvc3-rtm-sources \ webpages \ src \ System.Web.Helpers \WebGrid \ WebGrid.cs ", строки 17-22:
namespace System.Web.Helpers {
public class WebGrid {
// jquery code for partial page update of grid components (see http://api.jquery.com/load/)
private const string _ajaxLinkScript = "$(\'#{0}\').load(\'{1} #{0}\');";
private const string _ajaxLinkScriptWithCallback = "$(\'#{0}\').load(\'{1} #{0}\', {2});";
Как видите, ссылки на ajax нельзя изменить из внешнего API.К счастью, мы нашли способ исправить это, а также заставить его работать как с включенным, так и с отключенным JavaScript:
@{
WebGrid grid = new WebGrid(Model, ajaxUpdateContainerId: "myDivId", ajaxUpdateCallback: "myFunctionName");
WebGrid gridNoJS = new WebGrid(Model);
}
<script type="text/javascript">
$(myFunctionName);
function myFunctionName() {
$('#myDivId table tfoot a').each(function () {
var $this = $(this);
$this.attr('onclick', $this.attr('onclick').replace('#myDivId\',', '#myDivId table\','));
});
$('#myDivId table tfoot div').show();
}
</script>
<div id="myDivId">
@grid.Table(
columns: grid.Columns(
grid.Column("MyColumn1", header: "MyColumn1"),
grid.Column("MyColumn2", header: "MyColumn2")),
footer: @<text><noscript>@gridNoJS.Pager()</noscript><div style="display:none">@grid.Pager()</div></text>
)
</div>
Вы также можете экстраполировать эту идею, чтобы исправить также ссылки сортировки.