如何为多种数据类型创建单个下拉列表?

时间:2013-01-24 10:41:10

标签: c# asp.net-mvc-3

我正在使用ASP.Net MVC 3,我需要创建一个下拉列表,其中包含与多个数据库表相关的项目。

通常情况下,如果我需要为单个数据类型执行下拉列表,我可以轻松地将ID用作每个下拉列表的“值”option,并执行以下操作:

@Html.DropDownListFor(x => x.SelectedID, Model.GetMyList())

但现在我想混淆多种数据类型。因此,我想说这个例子我想创建一个单独的列表来表示像“所有者”这样的东西,这可以是“用户”或“客户”。在此示例中,User和Customer都是单独的数据库表,因此仅ID值不足以正确识别它们。

那么实现这种功能的最佳方法是什么?

直接离开我的头顶,我的第一个想法是创建一个“自定义”值字符串,然后可以解析服务器端以计算ID和数据类型,如...

"USER|1"
"CUSTOMER|1"

我知道我可以做到这一点,但我是否让它变得比它需要的更复杂?有内置或建议的方式吗?

2 个答案:

答案 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);