C# 将dropdownlistfor的int转换为字符串

C# 将dropdownlistfor的int转换为字符串,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个年龄的int属性,以及一个可供选择的可能年龄的selectlist。检索数据进行编辑时,添加tostring()方法时出现错误,该方法显示: 模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式 因此,我的viewmodel看起来像: public int LowerAgeLimit { get; set; } public List<SelectListItem> Ages { get; set; } 如果没有tostring()方法,它将显示blank

我有一个年龄的int属性,以及一个可供选择的可能年龄的selectlist。检索数据进行编辑时,添加tostring()方法时出现错误,该方法显示:

模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式

因此,我的viewmodel看起来像:

public int LowerAgeLimit { get; set; }
public List<SelectListItem> Ages { get; set; }
如果没有tostring()方法,它将显示blank,这很有意义,因为它需要一个字符串。但它不允许我在没有错误的情况下转换为字符串。我还尝试在viewmodel中创建一个新的string Age属性,并在查询中将int转换为字符串,但仍然无法让dropdownlist显示该值

在查询中,我填充了年龄列表,如下所示:

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()}));
        }
model.CreateGroupForm.Ages.Insert(0,(新建SelectListItem{Text=”“,Value=”“}));
对于(int i=1;i<100;i++)
{
Insert(i,(新SelectListItem{Text=i.ToString(),Value=i.ToString()}));
}

我创建了一个新的MVC项目,并尝试了以下操作:
型号:

控制器:

      public ActionResult Index()
    {
        Test tst = new Test();

        tst.Ages = new List<SelectListItem>();
        tst.Ages.Insert(0, (new SelectListItem { Text = "", Value = "" }));
        for (int i = 1; i < 100; i++)
        {
            tst.Ages.Insert(i, new SelectListItem { Text = i.ToString(), Value = i.ToString() });
        }


        return View(tst);
    }
for (int i = 1; i < 100; i++)
{
    model.CreateGroupForm.Ages.Add(new SelectListItem {Text = i.ToString(), Value = i.ToString()});
}
public ActionResult Index()
{
测试tst=新测试();
tst.Ages=新列表();
插入(0,(新SelectListItem{Text=”“,Value=”“});
对于(int i=1;i<100;i++)
{
Insert(i,新SelectListItem{Text=i.ToString(),Value=i.ToString()});
}
返回视图(tst);
}
编辑: 更新了“年龄”列表的填充方式后,我的下拉列表仍在工作,但下拉列表中的第一个值为空。检查已编辑的控制器。

看起来您在年龄列表的开头添加了一个虚拟行-这是不必要的。尝试进行以下更改:

型号:

[Required]
public int? LowerAgeLimit { get; set; }
视图:

控制器:

      public ActionResult Index()
    {
        Test tst = new Test();

        tst.Ages = new List<SelectListItem>();
        tst.Ages.Insert(0, (new SelectListItem { Text = "", Value = "" }));
        for (int i = 1; i < 100; i++)
        {
            tst.Ages.Insert(i, new SelectListItem { Text = i.ToString(), Value = i.ToString() });
        }


        return View(tst);
    }
for (int i = 1; i < 100; i++)
{
    model.CreateGroupForm.Ages.Add(new SelectListItem {Text = i.ToString(), Value = i.ToString()});
}

在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);

您不需要.ToString()-到int的转换由模型绑定器自动处理。我有很多带有整数参数的Html.DropDownListFor。好的,很高兴知道,你知道为什么它不显示数据吗?我想你需要向我们展示你是如何填充模型的。CreateGroupForm.Age我已经用填充年龄列表的方式编辑了OP。谢谢你的所有想法,不幸的是,使用建议的解决方案仍然不起作用。将通过skype与某人讨论,因为代码中一定有有趣的事情。
@Html.TextBoxFor(x => x.LowerAgeLimit, 
    new { @class = "form-control", type = "number", min = "1", max = "99"})
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" })