2011-08-21 80 views
0

在ASP.NET MVC3中,我認爲它已成爲一個已知問題,而我只是沒有找到正確的答案來解決我的問題。如何綁定MVC3中的枚舉值以選擇正確的枚舉值?

我有一個枚舉這樣的事情

public enum CardType 
{ 
    [Description("")] 
    None = 0, 

    Visa = 1, 

    Mastercard = 2, 

    Discover = 3, 

    [Description("American Express")] 
    AmericanExpress = 4 
} 

現在正確的任期將是這樣的事情正在被從數據庫中的表拉,因爲我只感到我已經啓用了某些類型的卡馬上。我們只有Visa/Mastercard

<select name="CardType" id="CardType"> 
    <option value="1">Visa</option> 
    <option value="2">Mastercard</option> 
</select> 

現在讓我們說我想要萬事達被默認選中。我必須這樣做

​​

現在我沒有這個部分的問題,這並不總是沒有前途的工作。有時它會通過「萬事達卡」而不是通過的數字值......我對如何解決這個問題感到困惑......只有幾個我不想使用的解決方案,如果我可以幫助它,因爲它只是意味着更多的工作...

回答

0

我有點困惑你在做什麼,我真的不明白。

Selected = (d.ID == (int)CardType) 

你得到的ID,並檢查它對照枚舉CardType?這不會產生以下錯誤:

CardType' is a 'type' but is used like a 'variable' 

不應該這樣做嗎?

CardTypes = new List<SelectListItem>(); 
var ctypes = db.ExecuteReaderDynamic("CardType_GetAll", null, System.Data.CommandType.StoredProcedure) 
     .Select(d => 
     new SelectListItem 
    { 
     Text = d.Name, 
     Value = d.ID.ToString() 
        Selected = false 
    }); 
CardTypes.AddRange(ctypes); 

SelectList oCards = new SelectList(oCardTypes, (int)CardType.Mastercard); 

並使用oCards直接進入您的組合框?

+0

否CardType是表中的一個屬性,我只是將其轉換爲整數。將它設置爲Mastercard的數據庫中的ID爲2的問題例如...它不選擇第一個,因爲它是選擇列表中的第一個選項。如果我通過HttpPost提交數據,或者它不會根據值設置值。這是應該工作的。 – Benjamin

+0

哦,更不用說當前的Select DropDownList代碼工作的方式是它試圖設置選定的值。基本上它不會使用我所做的「選擇列表」,即使是新的SelectList等也不起作用,因爲它期望像「MasterCard」這樣的數值而不是2,所以理論上「2」==「 MasterCard「是False ...這就是問題所在,我開始認爲我必須克隆Select Internal來更好地處理比較」Enum.ToString「的比較,如果比較失敗,它會嘗試比較數值比較... – Benjamin

+0

填寫所有選擇值爲False默認值是什麼問題?該ID與Enum索引是否匹配?所以當你在SelectList中選擇正確的,那麼這應該是正確的?你爲什麼使用ToString()?您可以完美地將Int值推入SelectListItem值。 –