试图获得它时错误的双倍价值

时间:2014-06-12 07:27:25

标签: c# asp.net-mvc

我正在开发一个ASP.NET MVC Web应用程序。在我的一个观点中,我有一个列表框,其中填充了一些双重值(基于我的ViewModel):

public class SuggestionViewModel
{
    public bool PADP { get; set; }
    public bool PremedicationPADP { get; set; }
    public double NbPADP { get; set; }
    public IEnumerable<SelectListItem> PADPItems { get; set; }
    public bool Other { get; set; }

    public SuggestionViewModel()
    {
        PADPItems = (new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4 }).Select(d => new SelectListItem { Value = d.ToString(), Text = d.ToString() });

        PADCItems = (new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4 }).Select(d => new SelectListItem { Value = d.ToString(), Text = d.ToString() });
    }
}

当我试图通过控制器中的动作恢复这些值时,我得到了一些错误的值。例如,如果我在我的视图'0.25'中选择,我会得到'25 .0',如果完全错误的话。当我试图获得它时,为什么价值会发生变化?

编辑:我得到的列表框HTML代码:

<option value ="0,25">0,25</option>
<option value ="0,5">0,50</option>
<option value ="0,75">0,75</option>
<option value ="1">1</option>

1 个答案:

答案 0 :(得分:1)

我相信&#34;正确的事情&#34;是将整个解决方案的本地化设置为法语(根据评论,这是您使用的)。但是,这通常会引入开销并影响其他设置,例如外部组件的配置设置(例如jQueryUI,Kendo - 考虑日期)。另一种解决方案是将模型的类型从double更改为string,并在控制器中使用目标本地化来解析它。

public class SuggestionViewModel
{
    public bool PADP { get; set; }
    public bool PremedicationPADP { get; set; }
    public string NbPADP { get; set; } //*1
    public IEnumerable<SelectListItem> PADPItems { get; set; }
    public bool Other { get; set; }

    public SuggestionViewModel()
    {
         PADPItems = (new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4 }).Select(d => new SelectListItem { Value = d.ToString(), Text = d.ToString() });

         PADCItems = (new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4 }).Select(d => new SelectListItem { Value = d.ToString(), Text = d.ToString() });
    }
}

我假设您在NbPADP属性中获得了所选值(如果我错了,请更正我)。当您使用模型时,您可以通过使用法语本地化转换它来获得double值:

 double dNbPADP = Double.Parse(model.NbPADP, new CultureInfo("fr-FR"));