我有兩個與以下代碼相關的問題我在 OnGet 方法中系結用戶,該方法作業正常,假設 User.Id 為 5,名稱為“TestGuy”。然后在站點完全加載并呼叫 OnPost 方法后,User.Id 與我傳遞的 OnGet 引數中的產品的“id”相同,并且 User.name 為空。為了在 OnPost 中檢索該用戶,我必須復制代碼并再次通過 SignInManager 查詢他,就像我在 OnGet 中那樣,感覺就是錯誤的。
所以我的第一個問題是:為什么會這樣。為什么 UserModel 用戶在頁面加載后丟失了他的資料/?我什至嘗試用 supportGet = true 來裝飾它
然后是第二個問題。在 OnGet 方法中,當我有這一行時:
ProductToBorrow = 產品[id - 1];
我必須從 id 中減去 1 以匹配它們,因為 ProductToBorrow.ID 在產品中總是比 id 大 1,我不明白為什么。我查看了我的代碼,沒有任何代碼可以導致 ProductToBorrow 上的添加。
public class RentProductModel : PageModel
{
private readonly SignInManager<IdentityUser> _signInManager;
public RentProductModel(SignInManager<IdentityUser> signInManager)
{
_signInManager = signInManager;
}
[BindProperty] public ProductModel ProductToBorrow { get; set; } = new();
public List<ProductModel> UserProducts { get; set; } = new();
public DateSelector dateSelector { get; set; } = new();
[BindProperty] public UserModel User { get; set; } = new();
public IEnumerable<SelectListItem> Days { get; set; }
public ApiManager apiManager { get; set; } = new();
public async Task<IActionResult> OnGetProduct(int id)
{
var currentUser = await _signInManager.UserManager.GetUserAsync(HttpContext.User);
var users = await apiManager.GetUsers();
User = users.FirstOrDefault(u => u.UserName == currentUser.UserName);
var products = await apiManager.GetProducts();
UserProducts = products.Where(x => x.Lent).Where(p => p.UserId == User.Id).ToList();
ProductToBorrow = products[id - 1];
Days = dateSelector.OptionListDays();
return Page();
}
public async Task<IActionResult> OnPostAsync()
{
var currentUser = await _signInManager.UserManager.GetUserAsync(HttpContext.User);
var users = await apiManager.GetUsers();
User = users.FirstOrDefault(u => u.UserName == currentUser.UserName);
//update product
ProductToBorrow.Lent = true;
ProductToBorrow.LoanDateTimeStart = DateTime.Now;
Convert.ToDateTime(ProductToBorrow.LoanDateTimeEnd);
ProductToBorrow.UserId = User.Id;
if (ModelState.IsValid)
{
await apiManager.UpdateProduct(ProductToBorrow);
TempData["success"] = "Product has been succesfully booked.";
}
return RedirectToPage("/Search");
}
}
我添加了以下代碼,但 AllProducts 在 OnPost 處理程式中有 0 個物件(圖片)
</div>
<form method="post">
@foreach (var product in Model.AllProducts)
{
<input type="hidden" asp-for="@product.Id"/>
<input type="hidden" asp-for="@product.Type"/>
<input type="hidden" asp-for="@product.Lent" value="false"/>
<input type="hidden" asp-for="@product.LoanDateTimeStart" value="null"/>
<input type="hidden" asp-for="@product.LoanDateTimeEnd" value="null"/>
<input type="hidden" asp-for="@product.Release" value="null"/>
<input type="hidden" asp-for="@product.ReleaseId"/>
<input type="hidden" asp-for="@product.User" value="null"/>
<input type="hidden" asp-for="@product.UserId" value="null"/>
}
<div class="m-3" style="padding: 10px">
<button type="submit" class="btn btn-warning" asp-page-handler="Reset">RESET PRODUCTS</button>
</div>
</form>
</div>
uj5u.com熱心網友回復:
嘗試使用以下代碼將資料傳遞給處理程式:
@for (var i = 0; i < Model.AllProducts.Count(); i )
{
<input type="hidden" asp-for="@Model.AllProducts[i].Id"/>
<input type="hidden" asp-for="@Model.AllProducts[i].Type"/>
<input type="hidden" asp-for="@Model.AllProducts[i].Lent" value="false"/>
<input type="hidden" asp-for="@Model.AllProducts[i].LoanDateTimeStart" value="null"/>
<input type="hidden" asp-for="@Model.AllProducts[i].LoanDateTimeEnd" value="null"/>
<input type="hidden" asp-for="@Model.AllProducts[i].Release" value="null"/>
<input type="hidden" asp-for="@Model.AllProducts[i].ReleaseId"/>
<input type="hidden" asp-for="@Model.AllProducts[i]t.User" value="null"/>
<input type="hidden" asp-for="@Model.AllProducts[i].UserId" value="null"/>
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/483049.html
下一篇:在ASP中創建url。網路MVC
