gpt4 book ai didi

c# - 如何在 OnPost 之后将模型保留在我的 View 中?

转载 作者:行者123 更新时间:2023-12-03 14:33:51 25 4
gpt4 key购买 nike

我正在使用 .Net Core 进行一个项目,并且正在使用 ASP Razor Pages。
在我的模型中,我有一个 OnGet,它在我的 View 中加载我需要的所有数据。

public IList<Projet> Projets { get; set; }
public ActionResult OnGet()
{
Projets = _serviceSelect.getProjets();
return Page();
}

然后,在我提交表单时激活的 OnPost 中。
<form method="post">
<div asp-validation-summary="All" class="text-danger"></div>
<input type="radio" value="1" asp-for="LoginData.TypeCompte" />choice<br />
Username: <input asp-for="LoginData.Username" /><br />
Password: <input asp-for="LoginData.Password" /><br />
Remember me: <input asp-for="LoginData.RememberMe" type="checkbox" /><br />
<input asp-page-handler="connexion" type="submit" value="Login" />
@Html.AntiForgeryToken()
</form>

我想使用我的 ModelState 在我的 View 中显示一个错误。
public ActionResult OnPostConnexion()
{
if (ModelState.IsValid)
{
// Do stuff
}
else
{
ModelState.AddModelError("", "username or password is blank");
return Page();
}
}

但是,当我返回 Page() 时,就像重新加载模型一样,当我尝试访问我的数据时,我的对象为空。
 Object reference not set to an instance of an object.
@foreach (var item in Model.Projets)

如何在不丢失模型中包含的数据的情况下更新我的 View ?

最佳答案

我通过将 return Page(); 替换为 return this.OnGet(); 中的 public ActionResult OnPostConnexion() 解决了这个问题

这样,您在 OnGet 中填充 PageModel 属性的任何逻辑都会被重用。

所以我的完整示例如下所示:

    public IEnumerable<SelectListItem> CompanyListing { get; private set; }

public async Task<IActionResult> OnGet()
{
if (!string.IsNullOrEmpty(this.ErrorMessage))
{
this.ModelState.AddModelError(string.Empty, this.ErrorMessage);
}

this.CompanyListing = await this.PopulateCompanyList();
return this.Page();
}

public async Task<IActionResult> OnPostAsync()
{
if (!this.ModelState.IsValid)
{
// Something failed. Redisplay the form.
return await this.OnGet();
}

return this.RedirectToPage("/");
}

关于c# - 如何在 OnPost 之后将模型保留在我的 View 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50155478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com