2013-03-31 36 views
1

我使用durandal模板+微風工作在asp.net mvc項目上。在我的下拉列表中敲除驗證不起作用

我想定義我的視圖的驗證邏輯添加/編輯操作。

到目前爲止,它適用於文本,從數據庫中填充下拉列表:當元素沒有包含任何數據時,該元素由於敲除驗證而被標記爲紅色。

但它不適用於從簡單列表中填充的下拉列表。

其填充列表中的元素來自於一個枚舉:

public class Transport 
{ 
    [Key] 
    int id { get; set; } 
    ... 
    [Required] 
    public EnumCategory Category { get; set; } 
} 

public enum EnumCategory 
{ 
    Cat1, 
    Cat2, 
    Cat3 
} 

第一個問題:我不知道是否有可能從我的模型(服務器端)使用檢索枚舉它客戶端?現在,我創建了一個數組的客戶端來填充我的下拉:

var categories = [ 
    { id: 1, description: "Cat1" }, 
    { id: 2, description: "Cat2" }, 
    { id: 3, description: "Cat3" }]; 

問題二:顯示我的觀點時,如果類別下拉菜單中已經包含了一些數據,驗證工作(我指的是場被標記如果用戶清除下拉菜單,則顯示爲紅色)。但是,如果類別下拉菜單在顯示視圖時沒有包含任何數據,則下拉框不會標記爲紅色。

我在驗證失敗時所做的更改元素的背景顏色(如果無效)(感謝css'input-validation-error'>> red color)。

<select data-bind="options: $root.categories, 
        optionsText: 'description', 
        optionsValue: 'id', 
        optionsCaption: 'Choose...', 
        value: category, 
        validationOptions: { errorElementClass: 'input-validation-error' }, 
        valueUpdate: 'afterkeydown'"> 
</select> 

有沒有人知道爲什麼我的下拉列表的驗證沒有工作?

謝謝。

回答

0

最後,我把它用在我的類別列表爲空ID添加元素的工作:

var categories = [ 
    { id: '', description: '--Choose--' }, 
    { id: 1, description: 'Non classé' }, 
    { id: 2, description: 'Non nucléaire' }, 
    { id: 3, description: 'Classe II irradié' }, 
    { id: 4, description: 'Classe III' }]; 

我不知道爲什麼,但簡單地增加optionsCaption:「請選擇 - 」不工作進行驗證。我的意思是這個元素顯示在我的下拉列表中,但驗證過程並不認爲它是驗證錯誤。

我明確地必須添加一個元素到我的列表中。然後,當我的下拉列表中選中此元素時,它將被標記爲紅色。

0

當你說「清除下拉菜單」時,如果只有三個選項,不能選擇一個選項。您可以製作第一個下拉項目「選擇一個項目...」,以便您知道總會有一個項目。如果下拉索引爲0,則顯示紅色錯誤消息。

另一種選擇是顯示紅色的錯誤消息,如果將selectedIndex爲0或ITEMCOUNT爲0

這是否幫助?

+0

,當我說「明確的下拉」我應該說,我選擇的是第一項「選擇......」因爲我有一個'optionsCaption:.....'在我的選擇中。在我的解決方案中,如果我選擇第一個元素(即「選擇...」),元素不會以紅色標記,因此我不知道爲什麼? – Bronzato

3

只是偶然進入這個也和一些試驗和錯誤之後,我發現以下幾點:

驗證打破了,因爲optionsCaption使用未定義的值。

您的模型顯然使用''(在我的情況下它是空的) 由於null!= undefined它以某種方式全部崩潰。

認識到這一點,有兩種解決方案:

  1. 的值設置爲undefined模型(在你的榜樣transport.category(不確定)),並利用optionsCaption像你已經習慣了
  2. 自己添加自定義空選擇信息並跳過optionsCaption(您使用的解決方案)
+0

感謝您的信息。很有用。 – Bronzato