2015-04-17 43 views
3

我有一些我的文本字段的服務器端驗證消息。字段'title'是一個必需的字段服務器端,在該類中有一個'[Required]'數據屬性,但是這似乎只能在回發或表單提交時檢查。我將'標題'文本字段保存在jQuery.change事件中,下面是sudo代碼。但是我想用我的validationmessagefor來顯示來自客戶端檢查的錯誤信息。不知道如何去做這件事?對客戶端錯誤消息使用html.validationmessagefor

html。

@Html.ValidationMessageFor(model => model.Overview.Title, "", new { @class = "text-danger" }) 

如果我想要做一些客戶端的JavaScript檢查,然後使用這個元素來顯示一個客戶端的錯誤消息我可以這樣做,呈現爲

<span class="field-validation-valid text-danger" data-valmsg-for="Overview.Title" data-valmsg-replace="true"></span> 

。我只是想救自己使用另一個隱藏的元素。我知道我將不得不使用

數據valmsg換=「Overview.Title」

因爲其他數據屬性是所有其他文本字段相同。

如果我想檢查以確保「標題」的長度大於1,那麼在此處顯示客戶端錯誤消息的最佳方式是什麼?

也許是這樣 -

$('#Overview_Title').change(function() { 
 
    var title = $(this).val(); 
 
    if (title.length == 0) { 
 
     // show error message "title has to be a value to save" 
 
     } 
 
    else { 
 
     // do other work like save to db 
 
     } 
 
    });

+0

請問您的客戶端驗證只觸發或者它永遠不會觸發呢? – Rondel

+0

它永遠不會啓動,因爲我還沒有任何客戶端驗證。此特定頁面沒有任何表單提交或任何保存按鈕。所有事情都保存在jQuery.change()事件上。 – user1186050

+0

所以我想要做的是,當發生更改事件時,我會檢查一個值,如果沒有,因爲用戶從文本字段中刪除/刪除了值,則會顯示一條錯誤消息,說'需要值'做出改變' – user1186050

回答

3

你有幾個方法可以做到這一點,但我認爲這是最簡單的方法:

MVC將默認將jquery.validate javascript庫捆綁到您的頁面中。由於您已經使用[Required]屬性標記字段,因此Html.EditorFor會將正確的屬性綁定到您的HTML中,以便可以根據需要進行驗證。

要使您的當前邏輯適用於最小的更改,可以在輸入字段周圍添加<form>標籤。我認爲你需要使用validate方法來開箱即用。然後你的JavaScript將改變這樣的事情:

$('#Overview_Title').change(function() { 
if ($(this).valid()) { 
    // do your stuff 
    } 
else { 
    // error message displayed automatically. don't need to do anything here unless you want to 
    } 
}); 

這將允許您使用Required屬性來設置你的錯誤消息文本,你的ValidationMessageFor應該無需您任何額外的努力,顯示錯誤消息。

看看這個plunkr作爲概念證明:http://plnkr.co/edit/ip04s3dOPqI9YNKRCRDZ?p=preview

編輯

我還不能肯定我理解你的後續問題。但是,如果你想要的規則動態地添加到一個領域,你可以做一些沿着這些路線:

$("#someinput").rules("add", { 
required: true, 
messages: { 
required: "a value is required to save changes" 
} 
}); 

你可以添加沒有做這樣的事情反映服務器端規則。然後,您可以用相同的方式驗證該輸入。

+0

這個工程!但讓我說我有一個摘要文本字段,它可以是空的,所以沒有'[required]'屬性,但如果它有一個值,用戶刪除它,它是空的,然後更改被觸發保存,我需要它說'需要一個值來保存更改'。這將如何工作? – user1186050

+0

@ user1186050您可以添加僅在客戶端上的「規則」,如果它們未反映在您的模型中。我編輯了我的答案,以顯示可能的樣子。 – Rondel

0

如果你想使用jQuery你可以使用這樣的事情做100%的客戶端驗證:

​​3210

這裏是JSFiddle link

代碼在我張貼的例子,如果你開始輸入ISBN和標題爲空,您將收到錯誤消息。

不知道你的問題,你想怎麼觸發錯誤,所以我認爲這是對提交的不同輸入的條目

+1

100%客戶端驗證不好,不可信。 – Izzy

相關問題