如何解决在服务器端验证ASP.Net Core MVC之后,坚持IEnumerable <T>
我正在使用here中所述的服务器端验证。在页面的OnGet方法中,我用数据库中的项目列表填充IEnumerable。
[BindProperty]
public IEnumerable<Status> Statuses { get; set; }
public async Task<IActionResult> OnGetAsync()
{
Statuses = await _service.GetStatuses();
return Page();
}
当ModelState.IsValid返回false时,将重新显示该页面,但是IEnumerable的内容现在为零。
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return new PageResult();
}
... Save to DB
}
如果我复制Statues = await _service.GetStatues();是否存在一种简单的方法来保留IEnumerable
感谢您的帮助。
解决方法
我尝试将列表添加到Tempdata,但是页面只是 返回HTTP 500,
此错误表明您应该将状态直接存储在TempData中。
实际上,当我们传递对象数据时,我们需要将其序列化为json格式,然后将其存储在TempData中,然后通过反序列化获得它。
尝试以下代码:
using Newtonsoft.Json;
[BindProperty]
public IEnumerable<Status> Statuses { get; set; }
public async Task<IActionResult> OnGetAsync()
{
Statuses = await _service.GetStatuses();
TempData["Statuses"] = JsonConvert.SerializeObject(Statuses);
return Page();
}
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
Statuses = JsonConvert.DeserializeObject<IEnumerable<Status>>(TempData["Statuses"].ToString());
return new PageResult();
}
return RedirectToPage("./Index");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。