Использование перечисления для выбора значения по умолчанию для Html.DropDownListFor (), заполненного из базы данных - PullRequest
0 голосов
/ 05 октября 2011

Не удается установить выбранный элемент в Html.DropDownListFor, если существуют следующие условия:

1) Идентификатор выбранного элемента берется из перечисления (например, (int) AnimalType) и

2) Список заполняется из базы данных (или, фактически, из любого списка, кроме enum)

Например, в этом непроверенном псевдокоде DropDownList в представлении не будет выбран как собака Dog. Обратите внимание, что если я изменю перечисление на статический класс, который выдает значения типа int, у меня нет проблем. В операторе выбора Linq, если я пытаюсь привести a.AnimalType к (int) a.AnimalType, компилятор жалуется. Есть идеи?

Спасибо.

    //--------------In the model
    enum AnimalType
    {
            Dog = 1,
            Cat = 2,
            //etc.
    }

    public class Animal
    {
            public AnimalType AnimalId {get;set;}
            public string Name {get;set;}
            //etc.
    }
    public class AnimalModel
    {
            public AnimalId SelectedAnimal {get;set;}
            public IEnumerable<SelectListItem> AllAnimals {get;set;}
    }

    //--------------In the controller

    AnimalModel model = new AnimalModel();
    model.SelectedAnimal = (AnimalType)1;

    List<Animal> getAllAnimals = Repository.GetAllAnimals();//defined elsewhere

    IEnumerable<SelectListItem> animalList =
                    from a in getAllAnimals
                    select new SelectListItem
                    {
                        Selected = (a.AnimalType == (int)model.SelectedAnimal),
                        Text = a.Name,
                        Value = a.AnimalId.ToString()
                    };
    model.AllAnimals = animalList;

    //--------------In the view

    @Html.DropDownListFor(m => m.Id, Model.AllAnimals)

1 Ответ

0 голосов
/ 05 октября 2011

Попробуйте использовать целое число в качестве выбранного животного:

public class AnimalModel
{
    public int SelectedAnimal { get; set; }
    public IEnumerable<SelectListItem> AllAnimals { get; set; }
}

и затем в вашем контроллере:

public ActionResult Index()
{
    var animals = Repository.GetAllAnimals();
    var model = new AnimalModel
    {
        // define which item should be selected in the drop down
        SelectedAnimal = (int)AnimalType.Cat,

        // define the list of items in the drop down
        AllAnimals = animals.Select(x => new SelectListItem
        {
            Value = x.AnimalId.ToString(),
            Text = x.Name
        })
    };
    return View(model);
}

и, наконец, в поле зрения:

@model AnimalModel

@Html.DropDownListFor(x => x.SelectedAnimal, Model.AllAnimals)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...