Я бы использовал строго типизированные представления и модели представлений, поскольку это значительно упрощает работу, а не ViewBag.
Итак, начнем с просмотра модели:
public class VatRateViewModel
{
public string SelectedVatRateId { get; set; }
public IEnumerable<IVatRate> Rates { get; set; }
}
затем контроллер:
public class HomeController: Controller
{
public ActionResult Index()
{
var model = new VatRateViewModel
{
Rates = SqlDataRepository.VatRates.Data.GetAllResults()
};
return View(model);
}
[HttpPost]
public ActionResult Index(VatRateViewModel model)
{
// model.SelectedVatRateId will contain the selected vat rate id
...
}
}
Вид:
@model VatRateViewModel
@using (Html.BeginForm())
{
@Html.DropDownListFor(
x => x.SelectedVatRateId,
new SelectList(Model.Rates, "Id", "Description")
)
<input type="submit" value="OK" />
}
И если вы хотите использовать шаблон редактора для VatRateViewModel, вы можете определить его в ~/Views/Shared/EditorTemplates/VatRateViewModel.cshtml
:
@model VatRateViewModel
@Html.DropDownListFor(
x => x.SelectedVatRateId,
new SelectList(Model.Rates, "Id", "Description")
)
и тогда всякий раз, когда у вас есть свойство типа VatRateViewModel
, вы можете просто:
@Html.EditorFor(x => x.SomePropertyOfTypeVatRateViewModel)
, который будет отображать соответствующий шаблон редактора.