2011-12-08 16 views
1

ドロップダウンリストに含める10進値があり、選択した値が機能していませんでした。私は運のないコードをしばらく使いこなしました。最終的に私はまったく同じコードを使用しましたが、すべてを小数点から整数に変更しました。asp.net mvc 3 SelectList with decimal type

CommonServices.GetRewardTermInitialPercents戻るHtml.DropDownListFor @

(X => x.InitialRewardPercent、 CommonServices.GetRewardTermInitialPercents(Model.InitialRewardPercent)):(InitialRewardPercentが小数である)の前

選択リストと私が渡す値を選択:

返す新しいSelectList(rewardTermInitialパーセント、 "Percent"、 "PercentDisplay"、selectedPercent); Html.DropDownListFor @

(X => x.InitialRewardPercent、 CommonServices.GetRewardTermInitialPercents(Model.InitialRewardPercent * 100))

:(InitialRewardPercentがintである)後

私は0.25から25にしたかったので* 100でした。基本的には、変数タイプを10進数からintに切り替えるだけで、SelectListは適切な行を適切に選択してマークするようになりました。

誰かがSelectListを取得して小数点以下の値を扱うことはできますか、何か間違っていますか?

ありがとうございます!

答えて

2

私のために、次の作品:

モデル:

public class MyViewModel 
{ 
    public decimal InitialRewardPercent { get; set; } 
    public IEnumerable<SelectListItem> Percents { get; set; } 
} 

コントローラー:

public ActionResult Index() 
{ 
    var model = new MyViewModel 
    { 
     InitialRewardPercent = 0.25m, 
     Percents = new[] 
     { 
      new SelectListItem { Value = "0.15", Text = "15%" }, 
      new SelectListItem { Value = "0.25", Text = "25%" }, 
      new SelectListItem { Value = "0.35", Text = "35%" }, 
     } 
    }; 
    return View(model); 
} 

ビュー:予想通り

@model MyViewModel 
@Html.DropDownListFor(x => x.InitialRewardPercent, Model.Percents) 

、2番目の項目がで事前に選択され競り落としたときのドロップダウンwが示されている。だから私はあなたの例で何とかして、InitialRewardPercentの値と一致するリストの値がないので、最初は常に事前選択されていると思います。

+0

ありがとうございます。私がそれをしたとき、選択リストの私の値も小数でした、私はあなたの文字列を参照してください。それは私が間違っていたものであったに違いない。ありがとう。 – zgirod

2

私も同様の問題がありました。

私はそれがデータベースに4.50メートルとして格納されていたので、私の状況での修正はしたので (4.50m).ToString() == "4.50"

しかし、モデルのプロパティは、余分なゼロを追加しますSelectListItem.Valueので(4.5m).ToString() == "4.5"

を設定するdecimal.ToString()を使用していた

書式設定された文字列-decimal.ToString("0.00")を使用して、modelプロパティと同じになります。

public static IList<SelectListItem> ToSelectList(this IEnumerable<decimal> values, string format = "0.00") 
{ 
      return values 
       .Select(x => new SelectListItem() { Text = x.ToString(), Value = x.ToString(format) }) 
       .ToList(); 
}