ASP Razor 页面 BindProperties 值在 Post 上丢失

Ced*_*and 5 c# asp.net razor-pages

我正在处理 ASP Razor 项目 (.Net5)。这是一个带有用户列表和过滤器的页面。目标是向符合过滤条件的用户展示。下面的代码能够进行过滤,但是每次过滤完成时过滤值都会丢失(变成空白)。

我有 [BindProperties],但我不明白为什么它适用于 UserList(表数据)而不适用于过滤条件。

我尝试重新分配这些值,但它不起作用。有谁知道如何解决这个问题?任何指向根本原因和文档页面的指针将不胜感激。我看过https://www.learnrazorpages.com/razor-pages/tempdata但我不确定这是正确的方法。

另外,请毫不犹豫地提供有关代码本身的反馈,因为这实际上是我的第一个 ASP.Net 项目。

用户列表.cshtml

@model Web.Areas.Admin.Pages.UserListModel
@{
    ViewData["Title"] = "User list";
}
<h1>User list</h1>

<div>
    <form method="post">
        <label asp-for="UserNameFilter"></label>
        <input type="text" name="UserNameFilter" /> @*This input criteria reset when I click on filter*@
        <input type="submit" value="Filter" />
    </form>
</div>

<table class="table">
    <thead>
        <tr>
            <th>Id</th>
            <th>User Name</th>
            <th>Email</th>
            <th>Password</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var user in Model.UserInfos)
        {
        <tr>
            <td>@user.Id</td>
            <td>@user.UserName</td>
            <td>@user.Email</td>
            <td>
                <a asp-page="/UserUpdate" asp-route-id="@user.Id">Edit</a> |
                <a asp-page="/Details" asp-route-id="@user.Id">Details</a> |
                <a asp-page="/UserDelete" asp-route-id="@user.Id">Delete</a>
            </td>
        </tr>
        }
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

用户列表.cshtml.cs

using System.Collections.Generic;
using System.Linq;
using Entities;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Services;

namespace Web.Areas.Admin.Pages
{
    [Authorize(Roles = "ADMIN")]
    [BindProperties]
    public class UserListModel : PageModel
    {
        public string UserNameFilter { get; set; }
        public List<UserInfo> UserInfos { get; set; }
        private readonly IUserService _userService;

        public UserListModel(IUserService userService)
        {
            _userService = userService;
        }

        public void OnGet()
        {
            UserInfos = _userService.GetUserInfoList(new UserInfoFilter()).ToList();
        }

        public void OnPost()
        {
            var userInfoFilter = new UserInfoFilter
            {
                UserName = UserNameFilter
            };
            UserInfos = _userService.GetUserInfoList(userInfoFilter).ToList();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ced*_*and 5

所以这是一个基本的答案......你需要用模型分配输入的值......

<input type="text" name="UserNameFilter" value="@Model.UserNameFilter"/> 
Run Code Online (Sandbox Code Playgroud)

我将在这里留下帖子并为将来像我这样的其他菜鸟回答。继续编码..