2012-04-24 22 views
0

我有以下代码来填充DropDownList的SelectList ingoring的SelectedValue

var list = new Dictionary<string, decimal>(); 
list.Add("1.000.000", 1000000m); 
list.Add("500.000", 500000m); 
list.Add("5.000", 5000m); 
viewModel.MyValue = 500000.00m; //of type decimal? 
viewModel.MyList = new SelectList(list, "Value", "Key", viewModel.MyValue); 

虽然在HTML

@Html.DropDownListFor(model => model.MyValue, Model.MyList, "select value") 

一切工作正常(所选择的值传递给控制器​​,并定期保存),唯一不起作用的是选定的值。我传递的不是在下拉菜单中自动选择的。我错过了明显的东西吗?

+0

嗯,怪了,我想复制粘贴你r代码,即使您创建了所有字符串或整数,它仍然不会选择列表值。 – DMulligan 2012-04-24 15:48:26

+0

是的。我也尝试使用'viewModel.MyValue.ToString()'来查看是否有一些奇怪的行为,但没有。我一直用List 没有问题。猜猜我必须从头开始一个项目,看看我能否解决这个问题。 – Iridio 2012-04-24 15:53:11

+0

...然后我复制粘贴它在一个新的项目,它的工作逐字。现在我不知道该告诉你什么。 – DMulligan 2012-04-24 16:00:45

回答

0

我解决了这个问题。 而做的选择列表的的toString()方法是无法匹配500000.00与500000(我把我的问题了错误的价值,遗憾的错字。更新)

使用一个简单的froeach框架,你可以看到发生什么

viewModel.MyList = new SelectList(list, "Value", "Key", viewModel.MyValue); 
    foreach (var item in viewModel.MyList) 
    { 
    var p = viewModel.MyValue.ToString(); 
    if (item.Value == p) //here 500000 != 500000.00 
    { 
     item.Selected = true; 
     break; 
    } 
    } 

所以我解决这个问题简单地做

var list = new Dictionary<string, decimal>(); 
list.Add("1.000.000", 1000000.00m); 
list.Add("500.000", 500000.00m); 
list.Add("5.000", 5000.00m); 

感谢所有帮助反正