OnPost之后如何在我的视图中保留模型? [英] How can I keep my model in my View after OnPost?

查看:90
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆