【问题标题】:How to use Html.DropDownListFor() helper in the right way如何以正确的方式使用 Html.DropDownListFor() 助手
【发布时间】:2013-05-31 10:22:47
【问题描述】:

我有一个注册表单。我希望用户可以使用 html 中的选择列表来选择他们宠物的种族。所以我决定使用 Html.DropDownListFor() Html helper。

在我的模型中:

public class PetModel
{
    public long id { get; set; }
    public short gender { get; set; }
    public short type { get; set; }
    public string name { get; set; }
    public int raceID { get; set; }
    public int birthYear { get; set; }
    public int weight { get; set; }
    public bool neutered { get; set; }

    public IEnumerable<SelectListItem> raceList { get; set; }
}

我想为raceList填充一个下拉列表,用户可以选择他们宠物的种族。

所以我为局部视图创建了一个控制器

public PartialViewResult _SignupPet(PetModel model)
{
    model.raceList = entity.PetRaces.Select(w => new SelectListItem { Text = w.name, Value = w.id.ToString() });

    return PartialView(model);
}

在我看来:

@Html.DropDownListFor(m=>m.raceID, Model.raceList)

但是我收到了这个错误。

LINQ to Entities 无法识别方法 'System.String ToString()' 方法,并且这个方法不能翻译成store 表达。

现在我想知道这个。我通常使用下拉列表来选择一个 ID 并向用户显示文本而不是 ID。我将如何在我的项目中使用这个 Html.DropDownListFor() 助手。我是否使用了错误的方法?

【问题讨论】:

  • 你能传入 w.name 作为文本和 ID 吗?然后在控制器操作中使用名称?我也遇到过类似的问题,LINQ 无法转换 ToString()。

标签: asp.net-mvc-3 linq asp.net-mvc-4


【解决方案1】:

SelectListItem 的唯一 ID 必须是字符串。您不能在 LINQ 中进行转换,因为它不会翻译。我已经通过使用名称作为文本和 ID 来解决它,因为在我的情况下它是唯一的。

这里同样问题的另一个例子:Linq int to string

【讨论】:

  • 我的数据库中有一个 FK 关系 Pets 和 PetRaces。所以我不能将它设置为字符串。
  • 这是 LINQ to Entities 中的一个限制。您可以提取数据,然后循环以在代码中创建 List。这样你就可以进行转换了。丑陋的解决方案,但别无他法
  • 感谢您的支持。感谢您,我找到了解决方法:)
  • 记住并标记解决方案是否回答了您的问题。很高兴提供帮助,可惜它不优雅。几周前我遇到了同样的问题
【解决方案2】:

我无法解决我原来的问题,但我找到了替代解决方案。在我的控制器中,我更改了代码

model.raceList = entity.PetRaces.Select(w => new SelectListItem { Text = w.name, Value = w.id.ToString() });

model.raceList = entity.PetRaces.Select(w => new SelectListItem { Text = w.name, Value = SqlFunctions.StringConvert((double)w.id).Trim() });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多