C# 当ModelState无效时,不会调用Cancel按钮

C# 当ModelState无效时,不会调用Cancel按钮,c#,jquery,asp.net-mvc,C#,Jquery,Asp.net Mvc,我有两个按钮: <button id="submit" name="button" value="register" class="btn btn-primary">Submit</button> <button id="cancel" name="button" value="cancel" class="btn btn-secondary">Cancel</button> 然后,为了知道是否点击了“取消”按钮以将它们重定向到其他页面,在控制器

我有两个按钮:

<button id="submit" name="button" value="register" class="btn btn-primary">Submit</button>
<button id="cancel" name="button" value="cancel" class="btn btn-secondary">Cancel</button>
然后,为了知道是否点击了“取消”按钮以将它们重定向到其他页面,在控制器中,我的操作如下:

[HttpPost]
public ActionResult ForgotPassword(string button, ForgotPasswordViewModel fpModel)
{
   // cancel button, go back to LoginPage
   if (!string.IsNullOrEmpty(button) && button == "cancel")
      {
          return RedirectToAction("Login");
      }
      else
      { 
           // blah 
      }
}
如果他们在文本框中填写正确的有效值,然后单击“取消”,则此功能有效,但当文本框出现验证错误时,甚至不会调用此功能,然后单击“取消”。所以它也不会重定向它们


那我该怎么办

在这两种情况下(取消或提交),您似乎都在尝试将表单发回服务器

如果存在验证问题,将表单发布回服务器没有多大意义。如果您这样做,那么您将依赖服务器端验证检查,并确保重新路由到登录。您应该始终使用服务器端,但显然最好不要只依赖它,同时使用服务器端和客户端验证

另一种解决方案是用链接替换取消按钮。 例如


这在性能方面也更快,因为它将简单地将用户重定向到登录页面。而不是发回服务器,然后重新路由。

这听起来像是在两种情况下(取消或提交)都试图将表单发回服务器

如果存在验证问题,将表单发布回服务器没有多大意义。如果您这样做,那么您将依赖服务器端验证检查,并确保重新路由到登录。您应该始终使用服务器端,但显然最好不要只依赖它,同时使用服务器端和客户端验证

另一种解决方案是用链接替换取消按钮。 例如

这在性能方面也更快,因为它将简单地将用户重定向到登录页面。而不是发回服务器,然后重新路由

[HttpPost]
public ActionResult ForgotPassword(string button, ForgotPasswordViewModel fpModel)
{
   // cancel button, go back to LoginPage
   if (!string.IsNullOrEmpty(button) && button == "cancel")
      {
          return RedirectToAction("Login");
      }
      else
      { 
           // blah 
      }
}
@Html.ActionLink("Cancel", "Login")