Я все еще пытаюсь разобраться с Razor Pages для Net Core и, кажется, немного застрял на этом. У меня есть свой Index.cshtml:
@page
@model IndexModel
<input type="hidden" name="hdnPageSelector" id="hdnIndexPage" />
<div class="text-center">
<p>Welcome to</p>
<h1 class="display-4">"My Web App"</h1>
</div>
<div class="form-row">
<div class="form-group col-md-2">
<partial name="IndexPartials/_Navigation" />
</div>
<div class="form-group col-md-1">
</div>
<div class="form-group col-md-6">
<partial name="IndexPartials/_Body" />
</div>
<div class="form-group col-md-1">
</div>
<div id="refreshMembers" class="form-group col-md-2">
<partial name="IndexPartials/_Members" />
</div>
</div>
Обратите внимание, что последний div имеет id="refreshMembers"
. Частичное представление (_Members), которое загружено туда, выглядит так:
@model IndexModel
<label>Members</label>
<br />
@{
foreach (ApplicationUser user in Model.AppUsersList)
{
if (user.IsLoggedIn)
{
<label>@user.FirstName @user.LastName </label>
<span class="dot"></span>
}
else
{
<label>@user.FirstName @user.LastName</label>
}
}
}
В контроллере у меня есть свойство под названием:
public IList<ApplicationUser> AppUsersList { get; set; }
И это заполняется на OnGetAsync()
следующим образом:
AppUsersList = _userManager.Users.OrderBy(x => x.FirstName).Where(y => y.UserName != currentUser.UserName).ToList();
Это нормально, страница загружается с заполненным частичным представлением, как и ожидалось. Теперь я хочу, чтобы партиал обновлялся каждые 5 секунд, поэтому я поставил этот фрагмент Javascript / JQuery на место:
$(function () {
setInterval(function () {
$("#refreshMembers").load("/Index?handler=RefreshMembers");
}, 5000);
});
со следующей настройкой метода:
public async Task<IActionResult> OnGetRefreshMembers()
{
var currentUser = await _userManager.GetUserAsync(User);
AppUsersList = _userManager.Users.OrderBy(x => x.FirstName).Where(y => y.UserName != currentUser.UserName).ToList();
return new PartialViewResult
{
ViewName = "_Members",
ViewData = new ViewDataDictionary<List<ApplicationUser>>(ViewData, AppUsersList)
};
}
Однако частичное представление не обновляется. Если я поставлю точку останова в этом методе, я вижу, что он срабатывает каждые 5 секунд, несмотря на то, что Devtools заявляет, что при каждой попытке возникает ошибка:
В скорлупе я просто не могу перезагружать частичный вид каждые 5 секунд. Такое ощущение, что я близок, но просто что-то упускаю и не знаю, что это такое.