У меня есть уровень обслуживания, который предоставляет метод, который возвращает мне список, называемый 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?