2011-12-08 2 views
1

드롭 다운에 포함하려고 시도한 십진수 값이 있습니다. 선택한 값이 작동하지 않습니다. 행운을 남긴 채 잠시 동안 코드를 엉망으로 만들었습니다. 결국 똑같은 코드를 사용했지만 십진수부터 정수로 변경했습니다.asp.net mvc 3 SelectList with decimal type

(InitialRewardPercent는 소수 임) 전에

:

@ Html.DropDownListFor (X => x.InitialRewardPercent, CommonServices.GetRewardTermInitialPercents (Model.InitialRewardPercent))

CommonServices.GetRewardTermInitialPercents 반환 선택 목록에서 내가 합격 한 값을 선택합니다.

return new SelectList (rewardTermInitial 퍼센트, "퍼센트", "PercentDisplay", selectedPercent); (InitialRewardPercent는 INT이다) 후

:

@ Html.DropDownListFor (X => x.InitialRewardPercent, CommonServices.GetRewardTermInitialPercents (* 100 Model.InitialRewardPercent ))

저는 0.25에서 25로 가고 싶었 기 때문에 * 100을했습니다. 기본적으로 내가했던 것은 변수 타입을 10 진수에서 int로 바꿔서 SelectList가 올바른 행을 올바르게 선택했기 때문입니다.

다른 사람이 SelectList를 가져 와서 10 진수 값으로 작업 할 수 있습니까? 아니면 제가 잘못하고 있습니까?

감사합니다.

답변

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) 

, 두 번째 항목이 미리 선택 경쟁 할 때의 드롭 다운 w가 표시됩니다. 그래서 나는 어떻게 든 당신의 예제에서는 InitialRewardPercent의 값과 일치하는 값이리스트에 없다고 생각합니다. 그래서 첫 번째는 항상 미리 선택됩니다.

+0

감사합니다. 내가 그것을했을 때 선택 목록에서 내 값은 또한 소수였다, 나는 당신의 문자열을 참조하십시오. 그게 틀린 짓이었을거야. 감사. – zgirod

2

비슷한 문제가있었습니다. SelectListItem.Value 그렇게 (4.5m).ToString() == "4.5" 추가 제로를 추가 할 모델 속성이 데이터베이스에 4.50m로 저장 되었기 때문에 그러나

그렇게 (4.50m).ToString() == "4.50"

내 상황의 수정에 내가 설정 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(); 
}