Я бы настоятельно рекомендовал вам использовать модели представлений и строго типизированные представления вместо ViewData
и слабо типизированных помощников, поскольку у них отсутствует Intellisense и они являются источником многих ошибок и некрасивых представлений.
Модель:
public class MyViewModel
{
[Required]
public string SelectedExperienceId { get; set; }
public IEnumerable<SelectListItem> Experiences { get; set; }
[Required]
public string SelectedSizeId { get; set; }
public IEnumerable<SelectListItem> Sizes { get; set; }
}
Контроллер:
public ActionResult Index()
{
var model = new MyViewModel
{
Experiences = new[]
{
new SelectListItem { Value = "exp1", Text = "Experience 1" },
new SelectListItem { Value = "exp2", Text = "Experience 2" },
new SelectListItem { Value = "exp3", Text = "Experience 3" },
},
Sizes = new[]
{
new SelectListItem { Value = "s1", Text = "Size 1" },
new SelectListItem { Value = "s2", Text = "Size 2" },
new SelectListItem { Value = "s3", Text = "Size 3" },
}
};
return View(model);
}
Строго типизированное представление:
<%@ Page
Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<AppName.Models.MyViewModel>"
%>
...
<%= Html.DropDownListFor(
x => x.SelectedExperienceId,
new SelectList(Model.Experiences, "Value, "Text"),
"-- Experience --"
) %>
<%= Html.ValidationMessageFor(x => x.SelectedExperienceId) %>
...
<%= Html.DropDownListFor(
x => x.SelectedSizeId,
new SelectList(Model.Sizes, "Value, "Text"),
"-- Size --"
) %>
<%= Html.ValidationMessageFor(x => x.SelectedSizeId) %>
Теперь все, что осталось, это заменить жестко закодированные значения значениями из вашей базы данных, сопоставив возвращенный набор результатов из репозитория в IEnumerable<SelectListItem>
.