Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为多个数据类型创建一个下拉列表?_C#_Asp.net Mvc 3 - Fatal编程技术网

C# 如何为多个数据类型创建一个下拉列表?

C# 如何为多个数据类型创建一个下拉列表?,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我正在使用ASP.NETMVC3,我需要创建一个下拉列表,其中包含与多个数据库表相关的项 通常,如果我需要为单个数据类型创建一个下拉列表,我可以轻松地使用ID作为每个下拉列表选项的“值”,并执行如下操作: @Html.DropDownListFor(x => x.SelectedID, Model.GetMyList()) if(entityType == "USER") UpdateUser(entityId); else//CUSTOMER UpdateCustomer(

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

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

@Html.DropDownListFor(x => x.SelectedID, Model.GetMyList())
if(entityType == "USER")
   UpdateUser(entityId);
else//CUSTOMER
   UpdateCustomer(entityId);
但现在我想混合多种数据类型。让我们假设在这个例子中,我想创建一个列表来表示类似“所有者”的内容,它可以是“用户”或“客户”。在本例中,User和Customer都是独立的数据库表,因此仅凭ID值不足以正确识别它们

那么,实现这些功能的最佳方式是什么

我的第一个想法是创建一个“自定义”值字符串,然后在服务器端对其进行解析,以计算出ID和数据类型,比如

"USER|1"
"CUSTOMER|1"

我知道我可以做到这一点,但我是否让事情变得比需要的更复杂?是否有内置的或建议的方法来执行此操作?

在您的模型中,您不能执行以下操作:-

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; }
    }
}
公共类模型
{
公共字符串所有者{get;set;}
公共列表ListCollection{get;set;}
公共类MyList
{
公共int Id{get;set;}
公共字符串值{get;set;}
}
}

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

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

在设置select选项的值时,应创建一个自定义字符串,该字符串可以轻松地在服务器端进行解析,这是通过使用一个分隔实体类型和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]);
然后可以这样使用:

@Html.DropDownListFor(x => x.SelectedID, Model.GetMyList())
if(entityType == "USER")
   UpdateUser(entityId);
else//CUSTOMER
   UpdateCustomer(entityId);

我认为这行不通。所有者似乎与列表项没有关联。除非你想让我使用
Value
作为数据类型?但我不确定MVC是否能够绑定如此复杂的对象。。。。或者它可以?