从验证中排除按钮

时间:2012-02-05 14:46:03

标签: asp.net-mvc-3 validation

我的表单中包含验证器和2个按钮:

<input type="submit" class="LFL_btn" value="" />
<input type="image" src="/Content/images/btn_register.jpg" class="LFR_btn" id="btnRegister" />

但验证器工作,也是第二个按钮。为什么以及如何解决它?

1 个答案:

答案 0 :(得分:0)

  

为什么?

因为当您通过劫持此表单的提交事件提交表单时,jquery.validate会启动。由于两者都是提交按钮,因此都会对它们进行验证。

  

如何解决?

class="cancel"添加到要从验证中排除的按钮,这将指示jQuery.validate插件不运行验证:

<input type="image" src="/Content/images/btn_register.jpg" class="LFR_btn cancel" id="btnRegister" />
<input type="image" src="/Content/images/btn_register.jpg" class="LFR_btn cancel" id="btnRegister" />

documentation已涵盖此内容。

显然,所有这些仅涉及客户端验证。在服务器上,这是一个完全不同的故事。如果要在单击某个按钮时禁用验证,则首先需要知道单击了哪个按钮。这可以通过给第一个按钮name属性,然后在服务器上检查请求中该参数的值来实现:

<button type="submit" class="LFL_btn" name="validate" value="validate">Validate</button>

然后在您的控制器操作中检查是否使用此按钮提交表单并仅在这种情况下应用验证:

[HttpPost]
public ActionResult Foo(string validate)
{
    if (!string.IsNullOrEmpty(validate)) 
    {
        // the Validate button was clicked:
        var model = new MyViewModel();
        if (!TryUpdateModel(model))
        {
            // there were validation errors => redisplay the view
            return View(model);
        }
        // validation went fine => do some processing...
    }
    else
    {
        // the image button was clicked
        // do some other processing ...
    }
}