当ModelState无效时,不会调用取消按钮

时间:2016-06-29 20:30:07

标签: 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>

在一个页面中有一些文本字段,例如

@Html.TextBoxFor(m => m.EmailRequest, new { @class = "form-control", type = "email" })
@Html.ValidationMessageFor(m => m.EmailRequest)

然后要知道取消按钮是否被阻止将它们重定向到其他页面,在控制器中我有这样的:

[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 
      }
}

如果他们在文本框中填写好的有效值,然后点击取消,当文本框上出现验证错误,然后单击取消时,它甚至不会被调用。所以它也不会重定向它们。

那我该怎么办?

1 个答案:

答案 0 :(得分:2)

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

如果存在验证问题,将表单发回服务器没有多大意义。如果执行此操作,则依赖于服务器端验证检查并确保重新路由到Login。你应该总是有服务器端,但显然最好不要只依赖它并同时进行服务器端和客户端验证。

另一种解决方案是用链接替换取消按钮。 E.g。

@Html.ActionLink("Cancel", "Login")

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