1) Add a new property to my ViewModel? What should be the type? List?
You need 2 properties to be more precise: an IEnumerable<SelectListItem>
to hold all the available options and a scalar property to hold the selected value
2) Define a method that populates the above property with values.
Yes.
3) Use that property in the View? Use HTML.DropdownFor?
No, not in the view. The view doesn't call any methods. A view works with the view model. It is the responsibility of the controller to pass a properly filled view model to the view.
So for example:
public class MyViewModel
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Values { get; set; }
... some other properties that your view might need
}
and then a controller action that will populate this view model:
public ActionResult Index()
{
var model = new MyViewModel();
model.Values = new[]
{
new SelectListItem { Value = "1", Text = "item 1" },
new SelectListItem { Value = "2", Text = "item 2" },
new SelectListItem { Value = "3", Text = "item 3" },
};
return View(model);
}
and finally the strongly typed view in which you will display the dropdown list:
@model MyViewModel
@Html.DropDownListFor(x => x.SelectedValue, Model.Values)
UPDATE:
According to your updated question you are have an IEnumerable<SelectListItem>
property on your view model to which you are trying to assign a value of type IEnumerable<string>
which obviously is impossible. You could convert this to an IEnumerable<SelectListItem>
like this:
var domains = FetchAllDomains().Select(d => new SelectListItem
{
Value = d.DomainName,
Text = d.DomainName
});
return new EmailModel { DomainList = domains };
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…