扩展@ Html.DropDownListFor

时间:2013-05-02 17:22:14

标签: asp.net asp.net-mvc asp.net-mvc-4

我想通过扩展@Html.DropDownListFor帮助程序来使用以下代码。 我的控制器获取一个列表,我在视图模型中为IEnumerable添加了一个默认值。但是,每次我想要一个默认值的下拉列表时,我都不想写所有这些。所以扩展帮助似乎是合乎逻辑的。

public class SiteGetSitesViewModel
{
    public string SelectedSiteId { get; set; }
    public IEnumerable<SelectListItem> SiteListItems { get; set; }
}
public ActionResult GetSites()
{
    List<SiteDto> sites = _siteService.GetSites();
    const string defaultText = "Select a site";
    const string defaultValue = "-1";

    var siteGetSitesViewModel = new SiteGetSitesViewModel
        {
            SiteListItems = Enumerable.Repeat(new SelectListItem
                {
                    Selected = true,
                    Text = defaultText,
                    Value = defaultValue
                }, 1).Concat(sites.Select(s => new SelectListItem
                    {
                        Text = s.SiteName,
                        Value = s.SiteId.ToString()
                    }))
        };


    return PartialView("_GetSites", siteGetSitesViewModel);
}

1 个答案:

答案 0 :(得分:2)

Html.DropDownListFor支持为选项添加默认值,因此无需重新发明轮子:

使用此重载:

http://msdn.microsoft.com/en-us/library/ee703567(v=vs.108).aspx

@Html.DropDownListFor(
    m => m.Property,
    GetSelectList(),
    "defaultOption", // the text for the default option goes here
    null
)