Как связать значение перечисления в MVC3, чтобы выбрать правильное? - PullRequest
0 голосов
/ 21 августа 2011

В ASP.NET MVC3 я думаю, что это известная проблема, и я просто не нашел правильный ответ на мою проблему.

У меня есть что-то вроде этого

public enum CardType
{
    [Description( "" )]
    None = 0,

    Visa = 1,

    Mastercard = 2,

    Discover = 3,

    [Description( "American Express" )]
    AmericanExpress = 4
}

Теперь правильным термином будет что-то вроде этого, которое извлекается из таблицы в базе данных, потому что я получаю только определенные типы карт, которые я включил прямо сейчас. Который у нас есть только Visa / Mastercard

<select name="CardType" id="CardType">
    <option value="1">Visa</option>
    <option value="2">Mastercard</option>
</select>

Теперь допустим, что я хочу, чтобы Mastercard был выбран по умолчанию. Я должен сделать что-то вроде этого

CardTypes = new List<SelectListItem>();
var ctypes = db.ExecuteReaderDynamic( "CardType_GetAll", null, System.Data.CommandType.StoredProcedure )
      .Select( d =>
        new SelectListItem
    {
        Text = d.Name,
        Value = d.ID.ToString()
                    Selected = (d.ID == (int)CardType)
    } );
CardTypes.AddRange( ctypes );

Теперь у меня нет проблем с этой частью, которая не всегда не обещает работать. Иногда он будет передавать «Mastercard» вместо переданного числового значения ... Я не понимаю, как это исправить ... Только несколько решений, которые я не хочу использовать, если я могу помочь, потому что это просто означает больше работы ...

1 Ответ

0 голосов
/ 21 августа 2011

Я немного смущен тем, что вы делаете с этим, я не очень понимаю.

 Selected = (d.ID == (int)CardType)

Вы получаете ID и сравниваете его с Enum CardType?Разве это не дает следующую ошибку:

CardType' is a 'type' but is used like a 'variable'

Разве это не должно работать?

CardTypes = new List<SelectListItem>();
var ctypes = db.ExecuteReaderDynamic( "CardType_GetAll", null, System.Data.CommandType.StoredProcedure )
      .Select( d =>
        new SelectListItem
    {
        Text = d.Name,
        Value = d.ID.ToString()
                    Selected = false
    } );
CardTypes.AddRange( ctypes );

SelectList oCards = new SelectList(oCardTypes, (int)CardType.Mastercard);

И использовать oCards непосредственно в ваш выпадающий список?

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