2011-08-21 90 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值。 –