2013-10-16 20 views
2

我在我的視圖中使用ajax.beginform。在Html.BeginForm中的httppost之前mvc 4剃刀自定義客戶端驗證

@using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post)) 
{ 
    <table> 
     <tr> 
      <td> 
       <input type="text" id="txtCardNumber"> 
      </td> 
      <td> 
       <button id="Search"/> 
      </td> 
     </tr> 
    </table> 
} 

搜索按鈕點擊直接進入控制器上HTTPPost我想先做像支票卡號一些客戶端驗證,如果有數字和其他自定義的驗證來代替。如果任何驗證失敗,我不想去服務器端。 所以我試圖做返回假,但它掛了很長時間,而不是瞬間。我試過event.preventdefault,但我無法撤消它,並通過適當的值傳遞模型值到服務器端。

$("#Search").button({.live("click", function (event) { 
    var isvalid = SubmitValidations(); 
    if (isvalid) {   
//show progress bar 
     return true; 
    } else { 
     event.preventDefault(); 
     alert("Please correct the errors on the screen before proceeding."); 
     return false; 
    } 
}); 

如何執行自定義客戶端驗證並僅在客戶端驗證成功時才轉到服務器端。

+0

如果調試腳本 「的isValid」 永遠返回true? event.preventDefault()應該爲你工作 –

+0

是的,它返回true時,我的自定義驗證通過。但是,event.preventDefault()在正確的情況下將其正常的HTTPPost操作弄亂了。 – Kamayani

+0

當你說什麼搞砸你是什麼意思?在你的問題中,你說你無法使用適當的值進入服務器,它是否會返回,但沒有返回?在這種情況下,我認爲你不需要返回線路。刪除它們後會有什麼變化嗎? –

回答

0

live已被棄用。您的第一行應該是

$('#Search').on('click', function(event) { 

也嘗試從代碼中刪除返回。

+1

對不起,這是行不通的。它被重定向到服務器並進行應該避免的服務器端處理。由於屏幕停止掛我認爲它正在工作。 – Kamayani

+0

當驗證失敗時,它只是長時間掛在jquery上,並一直顯示進度條,但不會轉到服務器端,但如果驗證通過,它會正常進行。如何避免懸掛。它會去jquery-1.8.3.js並循環遍歷各種東西,所以進度條不斷顯示。 – Kamayani

+0

當我看到它已經從jQuery代碼中的錯誤。我沒有看到您發佈的代碼存在更多問題。嘗試刪除代碼段以查看是否有效。例如進度條。嘗試刪除它,看看事情是否開始奏效。如果您發現某個區域有問題,請發佈代碼,並讓我們看看我們是否可以修復它 –

0

我改變了輔助方法來指定一個ID,我可以用jQuery掛鉤到:

@using (@Html.BeginForm("ActionName","ControllerName",FormMethod.Post, new {id = "submitForm"})) 
    { 
    //... 
    } 

然後jQuery的:

 $('#submitForm').submit(function() { 
      return validateFields(self);//false stops POST, true continues POST 
     });