2

我有一个注册表单。我希望用户可以使用 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() 助手。我使用了错误的方法吗?

4

2 回答 2

1

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

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() });
于 2013-05-31T10:53:42.220 回答
1

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

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

于 2013-05-31T10:40:07.667 回答