我正在使用 EntityFramework 作为数据访问,以在 asp.net mvc Web 应用程序中向我的最终用户查看国家的下拉列表。
实现这一目标并不难,但我很难找到一个好看的方法。
但首先是一些代码:
<td>
@Html.DropDownListFor(x => x.ParentId, repos.GetParents(@Model.ParentId)
</td>
在真实代码深处的某个地方:
class dummy
{
public string Text { get; set; }
public int Value { get; set; }
}
private SelectList _parents;
public SelectList Parents
{
get
{
if (_parents == null)
{
var parents = Entities.Instance.Partners.Select(x => new dummy() { Text = x.Name, Value = x.Id }).OrderBy(x => x.Text).ToList();
parents.Insert(0, new dummy());
_parents = new SelectList(parents, "Value", "Text");
}
return _parents;
}
}
public SelectList GetParents(int? parentId)
{
if (parentId != 0 && parentId.HasValue)
{
//setSelected
}
return Parents;
}
如您所见,我创建了一个* * 虚拟类仅用于复制数据!为什么?因为x.Id.ToString
或等效方法在 linq to entity 中不起作用...
仍然有这样的东西SqlFunctions.Tostring((double)x.ID)
不是完美的解决方案,但很好。至少在我看到它使 Id 4 变成string
这样之前:“*lotsofspaces*4”和修剪每个值对于我来说太多了,不能被视为一个好的解决方案。
最漂亮的代码解决方案是这样的:
new SelectList(Entities.Instance.Partners, "Id", "Name");
美不美?:) 不,这不对!因为它从合作伙伴中选择整个数据 - 不仅是 ID 和名称列。
int
所以我的问题是:当我的 valueField 是一个valuetype时,你能告诉我一种从 EntityFrame 中的下拉列表中获取我的数据的干净且好看的方法吗?