Во-первых, спасибо за то, что нашли время, чтобы посмотреть на мою проблему.ASP.NET Razor Grid Pager in Partial View
У меня есть сайт ASP.net MVC3, в котором мы используем Razor.
Внутри этого веб-сайта у нас есть страница, отображающая сетку с частичным видом.
<div id="tradeList">
@{ @Html.Partial("~/Views/Trade/TradeGrid.cshtml", Model.TradeList); }
</div>
на главной странице я добавил некоторые JavaScript, чтобы проверить, если сетка требует обновления, а затем обновить его, если и это необходимому работает хорошо.
Однако, когда вы переходите на страницу 2 сетки после обновления, частичная страница отображается в полноэкранном режиме, а не в ее родительском представлении. Я заметил URL-адрес для обновления ссылок на страницы после обновления, любые идеи о том, как этого можно избежать.
Частичный вид снизу
@model HRM.Models.Trades
@{
var grid = new WebGrid(Model.RecapTradeModelList, canPage: true, rowsPerPage: Model.PageSize);
}
@grid.Table(columns: columns, tableStyle: "standardtable", htmlAttributes: new { id="tradeGridID" })
@{
string sRowCount;
if (grid.TotalRowCount == 0)
{
sRowCount = "No trades found";
}
else if (grid.TotalRowCount == 1)
{
sRowCount = "1 trade found";
}
else
{
sRowCount = Convert.ToString(@grid.TotalRowCount) + " trades found.";
}
if (grid.TotalRowCount > 1)
{
int iStart;
int iEnd;
iStart = (grid.RowsPerPage * grid.PageIndex) + 1;
iEnd = (grid.RowsPerPage * (grid.PageIndex + 1));
sRowCount += " Showing " + Convert.ToString(iStart) + " to " + Convert.ToString(iEnd) + ".";
}
}
<div id="pager">@grid.Pager(mode: WebGridPagerModes.All, numericLinksCount: 7)</div>
<div id="rowcount">
@sRowCount Display
<select name="pageSize" onchange="this.form.submit();">
<option value="5" @(Model.PageSize == 5 ? "Selected" : "")>5</option>
<option value="10" @(Model.PageSize == 10 ? "Selected" : "")>10</option>
<option value="20" @(Model.PageSize == 20 ? "Selected" : "")>20</option>
<option value="25" @(Model.PageSize == 25 ? "Selected" : "")>25</option>
<option value="50" @(Model.PageSize == 50 ? "Selected" : "")>50</option>
</select>
rows per page.
</div>
Частичный View Controller
public PartialViewResult TradeGrid(int pageSize = 0, string filterPeriod = "")
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
string userRole = _UserRepository.GetUserRoleByUserName(User.Identity.Name);
Trades model = new Trades();
model.PageSize = pageSize;
model.RecapTradeModelList = _TradeRepository.GetRecapTrades(User.Identity.Name, userRole, filterPeriod);
model.WebGridColumns = GenerateGridColumns();
return PartialView(model);
}
JavaScript обновив частичный вид.
if (updateRequired == "True")
{
//$('#tradeList').load('/Trade/TradeGrid?filterPeriod='+fp+'&pageSize='[email protected](Model.TradeList.PageSize));
jQuery.ajax({
url: "/Trade/TradeGrid",
data: { filterPeriod: fp, pageSize: @(Model.TradeList.PageSize)},
contentType: "application/html; charset=utf-8",
type: "GET",
dataType: "html",
success : function(data){
$('#tradeList').html(data);
}
})
}
Любые предложения о том, как я могу изменить это поведение, будут наиболее ценными. Заранее спасибо.
Как проверить, требуется ли обновление? – Tommy
Я делаю вызов Ajax, который возвращает логическое значение, которое определяет, были ли обновлены записи за последние x минут, так как я говорю, что все это работает нормально, это всего лишь URL-адрес поискового вызова, который изменяется от localhost/Trade ?. .. to localhost/Trade/TradeGrid? – Emlyn
Обычно, когда что-то подобное происходит, это происходит потому, что обработчик для того, что вы нажимаете, чтобы перейти на следующую страницу, теряет ссылку на то, к чему вы привязали его. Например, если я присоединяю обработчик клика к кнопке, а затем динамически загружаю новый HTML, где была кнопка, обработчик кнопки больше не будет функционировать и будет выполняться полный POST. – Tommy