OnPost之后如何在我的视图中保留模型? [英] How can I keep my model in my View after OnPost?
问题描述
我正在使用.Net Core进行项目,并且正在使用ASP Razor Pages.在我的模型中,我有一个OnGet可以加载视图中所需的所有数据.
I'm on a project with .Net Core and I'm using ASP Razor Pages. In my model, I have an OnGet which load all the data I need in my view.
public IList<Projet> Projets { get; set; }
public ActionResult OnGet()
{
Projets = _serviceSelect.getProjets();
return Page();
}
然后,在我提交表单时激活的OnPost中.
Then, in my OnPost which is activated when I submit my form.
<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在视图中显示错误.
I would like to display an error in my view, using my ModelState.
public ActionResult OnPostConnexion()
{
if (ModelState.IsValid)
{
// Do stuff
}
else
{
ModelState.AddModelError("", "username or password is blank");
return Page();
}
}
但是,当我返回Page()时,就像重新加载了模型,并且当我尝试访问数据时,我的对象为空.
But, when I return Page(), It's like the model is reload and when I try to access to my data, my objects are null.
Object reference not set to an instance of an object.
@foreach (var item in Model.Projets)
如何在不丢失模型中包含的数据的情况下更新视图?
How can I update my view without losing my data contain in the model ?
推荐答案
我通过用 return this.OnGet();
替换 return Page();
来解决此问题在 public ActionResult OnPostConnexion()
I solved this issue by replacing return Page();
with return this.OnGet();
in public ActionResult OnPostConnexion()
这样,您在OnGet中用于填充PageModel属性的任何逻辑都将被重用.
That way any logic you have in the OnGet which populates PageModel properties gets reused.
所以我的完整示例如下:
So my full example looks like:
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("/");
}
这篇关于OnPost之后如何在我的视图中保留模型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!