我的模型类中有以下代码: -
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? 感谢
答案 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)