在 Razor 頁面中,我想獲得有關如何生成查詢引數的特定行為,例如我想獲得這種 url:
https://localhost:5001/admin/users?q=1&page=5
在我的頁面模型中,我為該OnGetAsync方法系結了兩個屬性。我嘗試給屬性自定義命名
[Display(Name = "...")][FromQuery(Name = "...")][ModelBinding(Name = "...")][BindProperty(Name = "...")]
我什至嘗試使用這些屬性的組合,例如BindProperty與FromQuery. 我注意到的是,當[FromQuery]我在瀏覽器中手動撰寫 url 時,該屬性會獲得正確的名稱,但是在為表單或 url 生成它時,我無法使用正確的名稱獲取它。
這是我的頁面:
public class Users : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
public Users(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}
[FromQuery(Name = "q")]
[BindProperty(Name = "q", SupportsGet = true)]
public string Search { get; set; }
public IdentityUser CurrentUser { get; set; }
[FromQuery(Name = "page")]
[BindProperty(Name = "page", SupportsGet = true)]
public int CurrentPage { get; set; } = 1;
public ICollection<IdentityUser> Users { get; set; }
public async Task OnGetAsync()
{
CurrentUser = await _userManager.GetUserAsync(HttpContext.User);
IList<IdentityUser> users;
if (string.IsNullOrWhiteSpace(Search))
{
users = await _userManager.Users
.OrderBy(x => x.UserName)
.ThenBy(x => x.Email)
.ToListAsync();
}
else
{
users = await _userManager.Users.Where(
x => x.Username.Contains(Search)
|| x.Email.Contains(Search)
)
.OrderBy(x => x.UserName)
.ThenBy(x => x.Email)
.ToListAsync();
}
}
}
這是相關的html:
@page
@model Pages.Users
<form method="get" class="mt-5 mb-2">
<div class="form-row">
<div class="form-group col">
<label class="sr-only" asp-for="Search"></label>
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">
<i class="fa fa-search"></i>
</div>
</div>
<input asp-for="Search" class="form-control">
</div>
</div>
</div>
</form>
<ul class="pagination">
@for (var i = 1; i < Model.TotalPages; i )
{
<li class="page-item @(Model.CurrentPage == i ? "active" : "")">
<a asp-page="/Users" asp-route-search="@Model.Search" asp-route-currentpage="@i" class="page-link">@i</a>
</li>
}
</ul>
表單輸入中生成的名稱和idSearch代替q
分頁中生成的 url/users?search=aaa¤tpage=2不是/users?q=aaa&page=1
uj5u.com熱心網友回復:
Razor Pages 中的路由系統(用于從錨標記助手生成 URL)不喜歡page作為路由引數,因此您必須自己構建查詢字串,如果您必須將其page作為鍵:
<a href="/[email protected]&page=@1">@i</a>
傳遞給name屬性上的BindProperty屬性的別名只能以一種方式作業。當您使用輸入標簽助手時,它們會根據已應用的公共屬性的名稱生成name和id屬性BindAttribute。如果您想在表單欄位中使用不同的值,您可以通過name手動設定屬性來覆寫它。
<input asp-for="Search" name="q" >
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/371329.html
上一篇:ASP.NETCore-無法在屬性“MerchantStatus”上設定“System.Int32”型別的默認值“1”
