asp.net mvc 3 SelectList с десятичным типом - PullRequest
1 голос
/ 08 декабря 2011

У меня есть десятичное значение, которое я пытался включить в раскрывающийся список, и выбранное значение не работало.Некоторое время я бездельничал с кодом.В конце концов я использовал точно такой же код, но изменил все с десятичного на int, и он работает.

Before (InitialRewardPercent - десятичное число):

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

CommonServices.GetRewardTermInitialPercents возвращает список выбора и выбирает значение, которое я передаю в * * * * * * * *, "Percent", "PercentDisplay", selectedPercent);

После (InitialRewardPercent является целым):

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

Я сделал * 100, потому что хотел перейти с 0,25 на 25. В основном все, что я делал, это переключал тип переменной с десятичного на int и SelectListтеперь правильно помечает правильную строку как выбранную.

Может ли кто-нибудь еще получить список выбора для работы?k с десятичным значением или я что-то не так делаю?

Ответы [ 2 ]

3 голосов
/ 01 февраля 2012

У меня была похожая проблема.

Я использовал decimal.ToString() для установки SelectListItem.Value, поэтому (4.5m).ToString() == "4.5"

, однако свойство модели добавило бы дополнительный ноль, поскольку оно было сохраненокак 4,50 м в базе данных, так что (4.50m).ToString() == "4.50"

Исправление в моей ситуации заключалось в использовании отформатированной строки - decimal.ToString("0.00"), поэтому она была бы такой же, как свойство модели.

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();
}
2 голосов
/ 08 декабря 2011

У меня работает следующее:

Модель:

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)

Как и ожидалось, второй элемент предварительно выбирается в раскрывающемся списке при отображении представления. Так что я думаю, что в вашем примере в списке нет значения, соответствующего значению InitialRewardPercent, поэтому первое всегда выбирается заранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...