0
我有一個驗證器和2個按鈕的形式,內部形狀:排除按鈕從驗證
<input type="submit" class="LFL_btn" value="" />
<input type="image" src="/Content/images/btn_register.jpg" class="LFR_btn" id="btnRegister" />
但驗證工作和第二個按鈕了。爲什麼以及如何解決它?
我有一個驗證器和2個按鈕的形式,內部形狀:排除按鈕從驗證
<input type="submit" class="LFL_btn" value="" />
<input type="image" src="/Content/images/btn_register.jpg" class="LFR_btn" id="btnRegister" />
但驗證工作和第二個按鈕了。爲什麼以及如何解決它?
爲什麼?
因爲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 ...
}
}
奇怪,但不起作用... – John 2012-02-05 18:57:01