Создание DropDownList в модели?

У меня есть уровень обслуживания, который предоставляет метод, который возвращает мне список, называемый GetStates.

public List<StateObject> GetStates()

My State Object - это просто созданный мной пользовательский объект:

public class StateObject
{
    public int stateId { get; set; }
    public string description { get; set; }
    public Boolean isDefault { get; set; }
}

В своих моделях я пытаюсь создать модель, которая будет использоваться для моего экрана отображения и модификации задачи. Одна вещь, для которой это будет использоваться, - это обработка отображения и выбор раскрывающегося списка, который предоставит список состояний, доступных для моей задачи. Итак, моя модель выглядит примерно так (удаленные свойства, которые нас не волнуют - она ​​немного больше, чем это:

public class TaskModifyModel
{
    public int stateId { get; set; }
    public string state { get; set; }

    public SelectList states { get; private set; }

    public TaskModifyModel()
    {

        states = new SelectList(
            (new ReferenceService().GetStates()),
            "stateId",
            "description",
            1);

    }
}

Итак, stateId содержит выбранное состояние, а state содержит текстовое описание выбранного состояния. В конструкторе я пытаюсь создать список состояний SelectList для представления ... и заполнить его.

Затем в представлении я пытаюсь отобразить раскрывающийся список:

@Html.DropDownListFor(m=>m.stateId, new SelectList(Model.states, "stateId", "description", Model.priorityId))

Это печально.

DataBinding: 'System.Web.Mvc.SelectListItem' не содержит свойства с именем 'stateId'.

Я искал и думал, что делаю это правильно, но ошибка говорит, что это не так ... ясно. :) Может ли кто-нибудь объяснить мне, почему это не работает, а также правильно ли это делать?

Изменить: после помощи ниже теперь он работает. Если я создаю новую задачу (taskId == 0), то мне нужно получить значение раскрывающегося списка по умолчанию, как оно хранится в моей базе данных .... Итак, это чисто? Это мой рабочий конструктор объекта:

общедоступная TaskModifyModel () {var referenceService = new ReferenceService (); var p = referenceService.GetPriorities (); var s = referenceService.GetStates ();

    var defaultP = (from a in p where a.isDefault select a).FirstOrDefault();
    var defaultS = (from a in s where a.isDefault select a).FirstOrDefault();

    priorities = new SelectList(
        (p),
        "priorityId",
        "description"
        );
    priorityId = taskId == 0 ? defaultP.priorityId : priorityId;

    states = new SelectList(
        s,
        "stateId",
        "description");
    stateId = taskId == 0 ? defaultS.stateId : stateId;

}

Is it OK?


person Craig    schedule 25.08.2012    source источник


Ответы (1)


Ваш public SelectList states { get; private set; } уже является SelectList, поэтому вам не нужно снова использовать его в вашем представлении.

Попробуйте вместо этого:

@Html.DropDownListFor(m=>m.stateId, Model.states)

И в вашей ViewModel удалите параметр «SelectedValue». @ Html.DropDownListFor инициализирует раскрывающийся список до правильного значения.

public class TaskModifyModel
{
    public int stateId { get; set; }
    public string state { get; set; }

    public SelectList states { get; private set; }

    public TaskModifyModel()
    {

        states = new SelectList(
            (new ReferenceService().GetStates()),
            "stateId",
            "description");
    }
}
person Alexandre Jobin    schedule 25.08.2012
comment
Отлично! Казалось, это сработало. Мне просто нужно решить, как установить «Выбранный элемент». Я RTF. :) - person Craig; 25.08.2012
comment
Спасибо, Александр, но выбранный элемент не работает. Я устанавливаю его в модели, и когда я отлаживаю, выбранный элемент устанавливается, но когда он отображается, «Выбранный» никогда не используется, а по умолчанию используется только первый элемент в списке. - person Craig; 25.08.2012
comment
Ой! Извините, это действительно работает! Мне не нужно устанавливать выбранный элемент, если я правильно установил значение свойства. Спасибо! Работающий. Обновленные вопросы с тем, что у меня есть сейчас. - person Craig; 25.08.2012