在SelectList上使用Html.DropDownList

时间:2014-05-06 12:09:35

标签: asp.net-mvc-4 razor html-helper

我的模型类中有以下代码: -

public class PageOptions
    {
        public PageOptions()
    {
      int  size = Int32.Parse(System.Web.Configuration.WebConfigurationManager.AppSettings["TechPageSize"]);
            NameSelectionOptions = new SelectList(
            new List<SelectListItem> {
            new SelectListItem { Text=size.ToString(), Value = size.ToString()},
            new SelectListItem { Text="50", Value = "50"}, 
            new SelectListItem { Text="100", Value = "100"},
            new SelectListItem { Text="200", Value = "200"},
            new SelectListItem { Text="500", Value = "500"}
        }, "Value", "Text");

    }

    public SelectList NameSelectionOptions { get; set; }
    }
}

但我怎么能在Html.DropDownList中显示SelectList?并设置默认值为size? 感谢

2 个答案:

答案 0 :(得分:4)

您只需将所需的选择作为第4个参数传递给SelectList构造函数:

NameSelectionOptions = new SelectList(
    new List<SelectListItem> {
    new SelectListItem { Text=size.ToString(), Value = size.ToString()},
    new SelectListItem { Text="50", Value = "50"}, 
    new SelectListItem { Text="100", Value = "100"},
    new SelectListItem { Text="200", Value = "200"},
    new SelectListItem { Text="500", Value = "500"}
}, "Value", "Text", size);   // <<< Add size here

这比选择列表中的特定项目更灵活。

将列表绑定到视图有多种选择。您可以在ViewModel中使用属性,但标准做法(根据Microsoft的脚手架模板)是将下拉列表传递给与Model属性同名的ViewBag条目中的视图。这还有一个额外的好处,就是将更简单的@Html.DropDownList("Size")版本自动绑定到名为Size的Model属性和ViewBag.Size中的列表。

e.g。

在控制器中:

ViewBag.Size = new SelectList(
    new List<SelectListItem> {
    new SelectListItem { Text=size.ToString(), Value = size.ToString()},
    new SelectListItem { Text="50", Value = "50"}, 
    new SelectListItem { Text="100", Value = "100"},
    new SelectListItem { Text="200", Value = "200"},
    new SelectListItem { Text="500", Value = "500"}
}, "Value", "Text", size);   // <<< Add size here
viewModel.Size = size;
return View(viewModel);

其中viewModel包含您要编辑的任何属性(包括Size)。

在视图中:

   @Html.DropDownList("Size")

或者您更喜欢强类型版本。

   @Html.DropDownListFor(m=>m.Size, (SelectList)ViewBag.Size)

在任何情况下,一致的命名都有助于避免出现问题。

默认值可以放在ViewBag中,但选择应该绑定到ViewModel,这样您就可以使用相同的ViewModel来接收返回的值。

   @Html.DropDownListFor(m=>m.Size, (SelectList)ViewBag.Size, ViewBag.DefaultSize)

更新

如果您不希望将当前值绑定到任何内容(根据注释),您只需要由控制器将ViewBag.Size设置为SelectList,并将其设置为View。您不需要模型中的值。

   @Html.DropDownList("Size")

默认选择将是上面new SelectList()中的选择(第4个参数,大小)。

答案 1 :(得分:1)

只需在其中添加已选择属性:

new SelectListItem { Text=size.ToString(), 
                     Value = size.ToString(),
                     Selected = true}

<强>型号:

public class PageOptions
    {
        public PageOptions()
    {
      int  size = Int32.Parse("20");
            NameSelectionOptions = new SelectList(
            new List<SelectListItem> {
            new SelectListItem { Text=size.ToString(), Value = size.ToString()},
            new SelectListItem { Text="50", Value = "50"}, 
            new SelectListItem { Text="100", Value = "100"},
            new SelectListItem { Text="200", Value = "200"},
            new SelectListItem { Text="500", Value = "500"}
        }, "Value", "Text");

    }

    public SelectList NameSelectionOptions { get; set; }
    public string SelectedValue { get; set; }
    }

<强>动作:

public ActionResult Index()
        {

            PageOptions model = new PageOptions();

            return View(model);
        }

强类型视图

@model TestAjaxUpload.Models.PageOptions
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>


@Html.DropDownListFor(x=>x.SelectedValue,Model.NameSelectionOptions)

如果你想在不改变当前模型的情况下进行查看,那么在视图中创建实例并像这样传递:

@model SomeModelClass
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>

@{

    TestAjaxUpload.Models.PageOptions objModel = new TestAjaxUpload.Models.PageOptions();

}


@Html.DropDownListFor(x=>x.SelectedValue,objModel.NameSelectionOptions)

但是您应该在模型中添加 PageOptions SelectList 属性并使用它,我不推荐直接在查看

更新(使用ViewBag):

使用ViewBag,您可以这样做:

 public ActionResult Index()
        {

            PageOptions model = new PageOptions();

            ViewBag.List = model.NameSelectionOptions;
            ViewBag.Selected = "20";

            return View(model);
        }

在视图中:

@Html.DropDownListFor(x=>x.SelectedValue,ViewBag.List as SelectList,ViewBag.Selected as string)