将int转换为string,用于dropdownlistfor

时间:2016-01-22 13:35:07

标签: c# asp.net-mvc

我有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()}));
        }

3 个答案:

答案 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)

修改 在您更新了填充年龄列表的方式后,我的下拉列表仍然有效,但是下拉列表中的第一个值为空值。检查编辑过的控制器。
Here's the result

答案 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" })