Вы не используете хелпер DropDownList должным образом. Чтобы создать выпадающий список, вам нужно 2 вещи:
- скалярное свойство для привязки к выбранному значению при отправке формы
- коллекция для привязки параметров к
В вашем примере у вас есть только одна из этих двух вещей (вторая). Ваш первый аргумент называется OwnerList
, и вы получили ViewBag.OwnerList
в качестве второго аргумента.
Итак:
@Html.DropDownList(
"SelectedOwnerId",
(SelectList)ViewBag.OwnerList,
new { @onchange = "this.form.submit();" }
)
Очевидно, я бы порекомендовал вам использовать строго типизированные представления и модели представления. И, очевидно, избавиться от слабо типизированных ViewBag / ViewData / ViewCrap.
Итак, начните с разработки модели представления, отвечающей требованиям вашего вида (который из того, что вы показали до сих пор, должен отображать выпадающий список):
public class OwnerViewModel
{
[DisplayName("Choose product owner: ")]
public string SelectedOwnerId { get; set; }
public IEnumerable<SelectListItem> OwnerList { get; set; }
}
затем контроллер:
public class ReportController: Controller
{
public ActionResult ProductsByOwners()
{
var model = new OwnerViewModel
{
// preselect the second owner
SelectedOwnerId = "2",
// obviously those come from your database or something
OwnerList = new[]
{
new SelectListItem { Value = "1", Text = "owner 1" },
new SelectListItem { Value = "2", Text = "owner 2" },
new SelectListItem { Value = "3", Text = "owner 3" },
}
};
return View(model);
}
[HttpPost]
public ActionResult ProductsByOwners(OwnerViewModel model)
{
...
}
}
и у вас есть соответствующее строго типизированное представление:
@model OwnerViewModel
@using (Html.BeginForm("ProductsByOwners", "Report", FormMethod.Post, new { id = "ProductsByOwners" }))
{
@Html.LabelFor(x => x.SelectedOwnerId)
@Html.DropDownListFor(
x => x.SelectedOwnerId,
Model.OwnerList,
new { onchange = "this.form.submit();" }
)
}