首先尝试在客户端上进行验证,以防止不必要的回发。您可以使用属性来设置验证:
using System.ComponentModel.DataAnnotations;
public class ForgotPasswordViewModel()
{
[Required]
[EmailAddress]
public string Email { get; set; }
}
在视图中检查模型状态:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> ForgotPassword(ForgotPasswordViewModel model)
{
if (ModelState.IsValid)
{
当然客户端是不够的,所以如果客户端验证被跳过,服务器确保模型验证.
滚动到某个位置的一种方法是使用锚点。锚点是一种客户端在文档中添加书签的方式。通常你会看到这样的东西:
<a href"home#contact">Contact</a>
通过单击链接,您将滚动到主页文档中的contact 书签。您可以对帖子执行相同操作:
<div id="contact">
<form method="post" action="home#contact">
@Html.AntiForgeryToken()
</form>
</div>
如果出现错误,页面将自动滚动到表单,因为在客户端设置了 #contact 哈希。假设是,如果成功,您将重定向到另一个视图。这是不使用 javascript 滚动的唯一方法。而且由于 javascript 验证不起作用...
请注意,如果您使用标签助手,则会自动添加 .Net Core AntiForgery。但是因为我没用过,所以只好自己添加了。
还有其他选项涉及 javascript 或某些服务器端重定向,但我认为这是一个简单的解决方案。
我不知道部分页面刷新是否是最好的解决方案。我认为这取决于。有很多关于如何发布异步的示例。检查此链接:https://www.w3schools.com/jquery/ajax_ajax.asp