2

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

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

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

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

那么实现此类功能的最佳方法是什么?

直接在我的脑海中,我的第一个想法是创建一个“自定义”值字符串,然后可以在服务器端解析它以计算出 ID 和数据类型,比如......

"USER|1"
"CUSTOMER|1"

我知道我可以完成这项工作,但我是否让这变得比需要的更复杂?是否有内置或建议的方式来执行此操作?

4

2 回答 2

0

由于没有人想出更好的方法,我可以确认我最初的想法(尽管它是不受欢迎的)完成了这项工作。

在设置选择选项的值时,应该创建一个可以轻松在服务器端解析的自定义字符串,这是使用分隔实体类型和 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);
于 2013-09-18T12:59:29.687 回答
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; }
    }
}

那么当您检查选择了哪个列表项时,您还可以访问“所有者”字段,它会告诉您它属于哪个表?

于 2013-01-24T12:46:41.200 回答