如何以正确的方式使用Html.DropDownListFor()帮助器

时间:2013-05-31 10:22:47

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

我有一个注册表格。我希望用户可以使用html中的选择列表选择他们的宠物比赛。所以我决定使用Html.DropDownListFor()Html帮助器。

在我的模特中:

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()'方法,并且此方法无法转换为商店   表达

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

2 个答案:

答案 0 :(得分:1)

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

此处同一问题的另一个例子是:Linq int to string

答案 1 :(得分:0)

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

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