【问题标题】:Razor Pages Net Core auto reload partial view on set frequencyRazor Pages Net Core 在设定频率上自动重新加载部分视图
【发布时间】:2021-06-24 18:39:50
【问题描述】:

我仍在尝试使用 Razor Pages for 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 秒重新加载一次。感觉就像我很接近,但只是错过了一些东西,不知道那是什么。

【问题讨论】:

  • 服务器出现错误,需要查看Output窗口查看详细异常。
  • 谢谢...。我错过了输出窗口中所需的所有信息!哈哈长周末!我将在下面发布修复程序!

标签: ajax asp.net-core razor-pages


【解决方案1】:

已经提醒要检查 VS 中的输出窗口好一点,我找到了问题的原因......实际上有两件事。这是修正后的方法:

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 = "IndexPartials/_Members",
        ViewData = new ViewDataDictionary<IndexModel>(ViewData, this)
    };
}

在哪里...

  1. 在 PartialViewResult 上命名时,我没有包含部分所在的文件夹
  2. 我需要返回整个 IndexModel 对象 - 更新了 AppUserList 属性,而不仅仅是 AppUser 列表。

【讨论】:

    猜你喜欢
    • 2021-01-28
    • 2018-04-05
    • 2020-05-08
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多