我的下拉列表有什么问题?
本文关键字:问题 什么 下拉列表 我的 | 更新日期: 2023-09-27 18:04:33
下拉列表不会选择我需要的值
Dictionary<int,int> RowDict = new Dictionary<int, int>();
for (int i = 1; i < 11; i++)
{
RowDict.Add(i, i);
}
var rows = new SelectList(RowDict, "Key", "Value", 6);
ViewBag.Rows = rows;
视图中的代码如下:
<div class="editor-label">
@Html.LabelFor(m => m.Rows)
</div>
<div class="editor-field">
@Html.DropDownListFor(m => m.Rows, (SelectList)ViewBag.Rows)
@Html.ValidationMessageFor(m => m.Rows)
</div>
当我运行代码6没有被选中。您能看到这段代码中的错误吗?
m => m. rows表明其中有一个模型。如果您使用模型中的行进行初始化,而不是使用视图包,则效果会更好。
一个非常快速和肮脏的初始化,像这样:
public class TestModel
{
public TestModel()
{
Dictionary<int, int> RowDict = new Dictionary<int, int>();
for (int i = 1; i < 11; i++)
{
RowDict.Add(i, i);
}
this.Rows = new SelectList(RowDict, "Key", "Value");
this.SelectedId = "6"; // binding to selection works as a String
}
public SelectList Rows { get; set; }
public string SelectedId { get; set; }
}
在请求视图的控制器中:
return View(new TestModel());
和以如下开头的视图:
@model <insert_appropriate_anmespace_here>.TestModel
…
@Html.DropDownListFor(m => m.Rows, Model.Rows, Model.SelectedId)
使它工作。只要记住模型是按值传递给视图的,你就可以按照你想要的方式调整这段代码和初始化,这就是我在构造函数中设置init的原因(每次创建TestModel时,Select List都会初始化)。
你也可以把viewbag和model混合在一起,让它工作,但我不建议这样做,因为可读性。
作为第一步,您需要将SelectList构造函数中的selectedValue变为字符串而不是整数。
var rows = new SelectList(RowDict, "Key", "Value", "6");
代替
var rows = new SelectList(RowDict, "Key", "Value", 6);
@Matthieu,我测试了你的方法,也是我自己的方式,我使用控制器来填充字典和SelectList。然后我让视图继承模型并显示下拉列表。但两者都行不通。那么通过ViewData传递SelectList然后在视图中显示它不是更容易吗?例子:
控制器var rowDict = new Dictionary<int, int>();
for (var i = 1; i < 11; i++)
rowDict.Add(i, i);
var rows = new SelectList(rowDict, "Key", "Value", 6);
ViewData["Rows"] = rows;
return View();
视图<%: Html.DropDownList("ItemsDropDown", (SelectList)ViewData["Rows"]) %>
编辑:多亏了Ukko将所选参数提示为字符串,所以我所尝试的代码也能正常工作,而且您不需要通过ViewModel的构造函数填充SelectList。这个想法本身实际上是不合逻辑的,因为它是在控制器中,你需要填充ViewModel并将其传递给视图:
模型:
public class HomeModel
{
public SelectList Rows { get; set; }
public String Selected { get; set; }
}
控制器var rowDict = new Dictionary<int, int>();
for (var i = 1; i < 11; i++)
rowDict.Add(i, i);
var rows = new SelectList(rowDict, "Key", "Value");
var model = new HomeModel { Rows = rows, Selected = "6" };
return View(model);
视图:
<div class="editor-field">
<%: Html.DropDownListFor(model => model.Rows, Model.Rows, Model.Selected) %>
</div>