我有Age的int属性,以及可供选择的年龄的选择列表。检索数据进行编辑时,我在添加tostring()方法时遇到错误:
模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。
所以我的viewmodel看起来像:
public int LowerAgeLimit { get; set; }
public List<SelectListItem> Ages { get; set; }
我的查询正在正确检索数据,然后在视图中我试图将数据显示如下:
@Html.DropDownListFor(x => x.LowerAgeLimit.ToString()
, Model.CreateGroupForm.Ages
, new { @class = "form-control" })
如果没有tostring()方法,它会显示空白,因为它需要一个字符串。但它不会让我转换为没有错误的字符串。我还尝试在viewmodel中创建一个新的字符串Age属性,并将int转换为查询中的字符串,但我仍然无法让下拉列表显示该值。
在查询中,我填写了年龄列表,如下所示:
model.CreateGroupForm.Ages.Insert(0, (new SelectListItem { Text = "", Value = "" }));
for (int i = 1; i < 100; i++)
{
model.CreateGroupForm.Ages.Insert(i, (new SelectListItem {Text = i.ToString(), Value = i.ToString()}));
}
答案 0 :(得分:2)
我创建了一个新的MVC项目并尝试了以下内容:
型号:
pageInfo
查看:
public class Test
{
public int LowerAgeLimit { get; set; }
public List<SelectListItem> Ages
{
get;set;
}
}
控制器:
@model WebApplication1.Models.Test
@Html.DropDownListFor(x => x.LowerAgeLimit, Model.Ages)
答案 1 :(得分:0)
看起来您在年龄列表的开头添加了一个虚拟行 - 这是不必要的。尝试进行以下更改:
型号:
for (int i = 1; i < 100; i++)
{
model.CreateGroupForm.Ages.Add(new SelectListItem {Text = i.ToString(), Value = i.ToString()});
}
查看:
@Html.TextBoxFor(x => x.LowerAgeLimit,
new { @class = "form-control", type = "number", min = "1", max = "99"})
控制器:
{{1}}
DropDownListFor的第4个参数控制&#34; dummy&#34; entry应该是,并确保它在模型上映射为null(Required属性将确保选择某些东西)。
或者,您可以使用数字控件!
{{1}}
答案 2 :(得分:0)
在ViewModel中尝试此操作:
public int LowerAgeLimit { get; set; }
public SelectList Ages { get; set; }
要填充,请尝试:
var items = new List<SelectListItem>();
items.Insert(0, (new SelectListItem { Text = "", Value = "" }));
for (int i = 1; i < 100; i++)
{
items.Insert(i, (new SelectListItem {Text = i.ToString(), Value = i.ToString()}));
}
model.CreateGroupForm.Ages = new SelectList (items, "Value", "Text", null);
您的观点:
@Html.DropDownListFor(x => x.LowerAgeLimit, (SelectList)Model.CreateGroupForm.Ages, new { @class = "form-control" })