Привязка выпадающего списка MVC Asp.net с использованием классов моделей - PullRequest
2 голосов
/ 10 января 2012

Я пишу страницу со списком MVC, которую нужно связать с раскрывающимся списком.
Поскольку я очень младший по сравнению с ASP.net MVC, я не знаю, как заставить раскрывающийся список работать правильно и выбирать динамически.

У меня есть два класса моделей

public class CycleType
{
    public int CycleTypeID { get; set; }
    public string Type { get; set; }

    public List<CycleModel> CycleModels { get; set; }
}

-----------------------------------------------------------   

public class CycleModel
{
    public int CycleModelID { get; set; }
    public int CycleTypeID { get; set; }
    public string Model { get; set; }

    public virtual CycleType CycleType { get; set; }
}

Затем один класс контроллера,

public class CycleModelController : Controller
{
UnitOfWork<CycleModel> unitOfWork = new UnitOfWork<CycleModel>();
UnitOfWork<CycleType> unitOfWork_cycleType = new UnitOfWork<CycleType>();

...

[HttpGet]
public ActionResult Edit(int CycleModelID)
{
    CycleModel cycleModel = unitOfWork.GenericTEntityRepository.GetByID(CycleModelID);
    ViewBag.CycleType = new SelectList(unitOfWork_cycleType.GenericTEntityRepository.Get(orderBy: CycleTypes => CycleTypes.OrderBy(CycleType => CycleType.Type)));
    return View(cycleModel);
}

...
}

Затем один файл Razor,

<div class="editor-field">
@*Html.DropDownList("CycleType")*@
@*Html.EditorFor(model => model.CycleTypeID)*@

@Html.DropDownListFor(model => model.CycleTypeID,
                                new SelectList(ViewBag.CycleType, "Type", "CycleTypeID"))
@Html.ValidationMessageFor(model => model.CycleTypeID)
</div>

Когда я запускаю свою программу, Я получаю сообщение об ошибке

DataBinding: 'System.Web.Mvc.SelectListItem' does not contain a property with the name 'Type'.

1) Как я могу исправить этот код?
2) Как сделать выбор элемента динамически?

Каждое предложение будет по-настоящему оценено.

1 Ответ

2 голосов
/ 10 января 2012

ViewBag.CycleType - это уже SelectList.Следовательно, вы можете использовать это напрямую.

@Html.DropDownListFor(model => model.CycleTypeID, (SelectList)ViewBag.CycleType)

Вы можете изменить код контроллера следующим образом.

ViewBag.CycleType = new SelectList(
      unitOfWork_cycleType.GenericTEntityRepository.Get(
      orderBy: CycleTypes => CycleTypes.OrderBy(CycleType => CycleType.Type)), 
      "Type", "CycleTypeID");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...