首页 > 解决方案 > 在服务器端验证后保留用户的输入

问题描述

我想在用户提交表单时保留用户的输入,如姓名、电子邮件和地址,但控制器上的验证失败并将它们重定向回页面。我应该使用 viewdata 将用户的输入传递回视图还是不好的做法?如果是这样,我应该使用什么?

标签: c#asp.net-core.net-coreasp.net-core-mvc

解决方案


...在控制器上的验证失败并将它们重定向回页面。

您不应该在验证失败时重定向。只需使用发布的模型再次返回视图:

if (!ModelState.IsValid)
{
    return View(model);
}

这假设您遵循 PRG(Post-Redirect-Get)模式并回发到相同的 URL。如果不是这种情况,您应该强烈考虑以这种方式重构您的代码。

发布到呈现表单的不同操作的唯一充分理由是表单是布局的一部分,或者放置在由多个不同操作呈现的多个不同视图上。如果是这种情况,最好的办法是拥有一个包含表单的视图,然后返回该视图,而不是在验证失败时重定向回原始操作。您可以提供一个带有 a 的隐藏输入returnUrl来保留用户的原始 URL,一旦他们成功提交表单,您就可以将他们重定向回那个。


推荐阅读