我有一个注册表格。我希望用户可以使用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()帮助器。我使用了错误的方法吗?
答案 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() });