【问题标题】:converting int to string for dropdownlistfor将 int 转换为下拉列表的字符串
【发布时间】:2017-11-01 00:02:21
【问题描述】:

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

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

所以我的视图模型看起来像:

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() 方法,它会显示空白,这是有道理的,因为它需要一个字符串。但它不会让我在没有错误的情况下转换为字符串。我也尝试在视图模型中创建一个新的字符串 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()}));
        }

【问题讨论】:

  • 您不需要 .ToString() - 转换为 int 由模型绑定器自动处理。我有很多带有整数参数的 Html.DropDownListFor。
  • 很高兴知道,知道为什么它不显示数据吗?
  • 我认为您需要向我们展示您如何填充 Model.CreateGroupForm.Ages

标签: c# asp.net-mvc


【解决方案1】:

我创建了一个新的 MVC 项目并尝试了以下方法:
型号:

 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)

控制器:

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

编辑: 在您更新了年龄列表的填充方式后,我的下拉列表仍然有效,但下拉列表中的第一个值为空值。检查编辑的控制器。

【讨论】:

  • 我已经用填充年龄列表的方式编辑了 OP。
【解决方案2】:

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

型号:

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

查看:

@Html.DropDownListFor(x => x.LowerAgeLimit.ToString()
                  , Model.CreateGroupForm.Ages
                  , new { @class = "form-control" },
                  , "(Choose)")

控制器:

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

DropDownListFor 的第 4 个参数控制“虚拟”条目应该是什么,并确保它映射到模型上的 null(Required 属性将确保选择某些内容)。

或者,您可以为此使用数字控件!

@Html.TextBoxFor(x => x.LowerAgeLimit, 
    new { @class = "form-control", type = "number", min = "1", max = "99"})

【讨论】:

  • 感谢您的所有想法,不幸的是,使用建议的解决方案仍然无法正常工作。将通过Skype与某人讨论,因为代码中一定有一些有趣的事情发生。
【解决方案3】:

在你的 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" })

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2014-05-23
    • 1970-01-01
    • 2018-01-08
    • 2021-12-18
    相关资源
    最近更新 更多