Tho*_*mas 7 c# asp.net-core razor-pages
我正在使用 .Net Core 进行一个项目,并且正在使用 ASP Razor Pages。在我的模型中,我有一个 OnGet,它在我的视图中加载我需要的所有数据。
public IList<Projet> Projets { get; set; }
public ActionResult OnGet()
{
Projets = _serviceSelect.getProjets();
return Page();
}
Run Code Online (Sandbox Code Playgroud)
然后,在我提交表单时激活的 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>
Run Code Online (Sandbox Code Playgroud)
我想使用我的 ModelState 在我的视图中显示一个错误。
public ActionResult OnPostConnexion()
{
if (ModelState.IsValid)
{
// Do stuff
}
else
{
ModelState.AddModelError("", "username or password is blank");
return Page();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我返回 Page() 时,就像重新加载模型一样,当我尝试访问我的数据时,我的对象为空。
Object reference not set to an instance of an object.
@foreach (var item in Model.Projets)
Run Code Online (Sandbox Code Playgroud)
如何在不丢失模型中包含的数据的情况下更新我的视图?
小智 5
我通过替换return Page();
为return this.OnGet();
in解决了这个问题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("/");
}
Run Code Online (Sandbox Code Playgroud)
您收到对象引用错误的原因是因为返回视图时尚未填充 Model.Projects,因此无法在 foreach 循环中进行迭代。
根据现有代码,您可以在返回页面之前再次填充模型。
public ActionResult OnPostConnexion()
{
if (ModelState.IsValid)
{
// Do stuff
}
else
{
Projets = _serviceSelect.getProjets();
ModelState.AddModelError("", "username or password is blank");
return Page();
}
}
Run Code Online (Sandbox Code Playgroud)
更好的解决方案是:
public ActionResult OnPostConnexion(viewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
else
{
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9869 次 |
最近记录: |