2012-02-05 66 views
0

我有一個驗證器和2個按鈕的形式,內部形狀:排除按鈕從驗證

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

但驗證工作和第二個按鈕了。爲什麼以及如何解決它?

回答

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

顯然這一切都只涉及客戶端驗證。在服務器上,這是一個完全不同的故事。如果你想在點擊某個按鈕時禁用驗證,你首先需要知道哪個按鈕被點擊。

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

,然後你的控制器動作檢查中,如果這個按鈕是用來提交表單和:這可以通過給第一按鈕name屬性,然後檢查服務器上的該參數的值從請求發生僅在此情況下應用驗證:

[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 ... 
    } 
} 
+0

奇怪,但不起作用... – John 2012-02-05 18:57:01