我正在使用ASP.Net MVC 3,我需要创建一个下拉列表,其中包含与多个数据库表相关的项目。
通常情况下,如果我需要为单个数据类型执行下拉列表,我可以轻松地将ID用作每个下拉列表的“值”option
,并执行以下操作:
@Html.DropDownListFor(x => x.SelectedID, Model.GetMyList())
但现在我想混淆多种数据类型。因此,我想说这个例子我想创建一个单独的列表来表示像“所有者”这样的东西,这可以是“用户”或“客户”。在此示例中,User和Customer都是单独的数据库表,因此仅ID值不足以正确识别它们。
那么实现这种功能的最佳方法是什么?
直接离开我的头顶,我的第一个想法是创建一个“自定义”值字符串,然后可以解析服务器端以计算ID和数据类型,如...
"USER|1"
"CUSTOMER|1"
我知道我可以做到这一点,但我是否让它变得比它需要的更复杂?有内置或建议的方式吗?
答案 0 :(得分:0)
在你的模型中你不能做这样的事情: -
public class Model
{
public string Owner { get; set; }
public List<MyList> ListCollection { get; set; }
public class MyList
{
public int Id { get; set; }
public string Value { get; set; }
}
}
那么当您检查选择了哪个列表项时,您还可以访问“所有者”字段,该字段将告诉您它属于哪个表?
答案 1 :(得分:0)
由于没有人提出任何更好的建议,我可以确认我最初的想法(尽管不需要)完成了这项工作。
设置select选项的值时,应该创建一个可以轻松解析服务器端的自定义字符串,这是使用分隔实体的TYPE和ID的管道实现的,例如:
"USER|1"
"USER|2"
"CUSTOMER|1"
"CUSTOMER|2"
将选定的值传递给服务器后,可以对其进行解析,如下所示:
string option = "USER|1";
string[] values = option.Split('|');
string entityType = values[0];
int entityId = Int.Parse(values[1]);
然后可以使用这样的东西:
if(entityType == "USER")
UpdateUser(entityId);
else//CUSTOMER
UpdateCustomer(entityId);