我有這個表格,用戶可以在其中看到他的帳戶金額,并且只需提供電子郵件就可以向其他用戶匯款。問題是,當用戶提供錯誤資料時,函式回傳頁面,但我得到NullExceptionError.
實際上,我認為驗證器作業正常,但回傳型別或此函式回傳頁面的方式有問題。
這里是Index.cshtml.cs:
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
private readonly WebBankDbContext _context;
private readonly UserManager<IdentityUser> userManager;
private readonly SignInManager<IdentityUser> signInManager;
public IdentityUser user;
public Account account;
[BindProperty]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[BindProperty]
[RegularExpression("([1-9][0-9]*)")]
public int AmountToSend { get; set; }
public IndexModel(SignInManager<IdentityUser> signInManager, UserManager<IdentityUser> userManager, ILogger<IndexModel> logger, WebBankDbContext context)
{
_logger = logger;
_context = context;
this.userManager = userManager;
this.signInManager = signInManager;
}
public IActionResult OnPost(string returnUrl = null)
{
if (ModelState.IsValid)
{
var destinationAccount = (from st in _context.Users where st.Email == Email select st.Id).First();
Console.WriteLine(destinationAccount);
if (destinationAccount != null)
{
if (returnUrl == null || returnUrl == "/")
{
return RedirectToPage("Index");
}
else
{
return RedirectToPage(returnUrl);
}
}
}
return Page();
}
public async Task OnGetAsync()
{
if (signInManager.IsSignedIn(User))
{
user = await userManager.GetUserAsync(User);
account = (from st in _context.Accounts where st.UserId == user.Id select st).First();
}
}
}
這里是Index.cshtml。這就是它的形式。當我提供錯誤的資料時,它會顯示NullExceptionError在h5.
<h5>Your balance: @(Model.account.Amount)$</h5>
<div class="text-center">
<p>Send money just by providing user ID</p>
</div>
<form method="post">
<div class="mb-3">
<label class="col-form-label" asp-for="Email">Receiver email:</label>
<input type="text" class="form-control" asp-for="Email" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="mb-3">
<label class="col-form-label" asp-for="AmountToSend">Amount:</label>
<input type="text" class="form-control" asp-for="AmountToSend" />
<span asp-validation-for="AmountToSend" class="text-danger"></span>
</div>
<div class="mb-3">
<button type="submit" class="btn btn-primary">Send money</button>
</div>
</form>
uj5u.com熱心網友回復:
當您發布時,您會丟失模型的狀態。您想在發布時填寫您的模型。
我的意思是,你 GET 頁面,它作業正常。然后您發布一些資料,POST 代碼將運行,但現在它位于 PageModel 的新實體中。這意味著 Model.account 是null。
您可以執行以下兩項操作之一:
- 先填好資料再做
return Page() - 重定向到 GET 操作,而不是回傳 Page()。
祝你好運!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/492102.html
標籤:C# 网 asp.net-mvc asp.net 核心 模型视图控制器
上一篇:制定高效的組合和填充演算法
