Asp.net 如何在SelectListItem中存储2个以上的值

Asp.net 如何在SelectListItem中存储2个以上的值,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-5,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,我正在处理两个不同的数据库,它们存储IP地址,因此我填充了一个下拉列表,其中显示了两个数据库的IP地址,如下所示:- public JsonResult LoadRelatedIPs(string searchterm, string Searchby) { var ITsysips = repository.getTechnologyIPs(searchterm, Searchby).Select(a => a.IPAddress).ToList

我正在处理两个不同的数据库,它们存储IP地址,因此我填充了一个下拉列表,其中显示了两个数据库的IP地址,如下所示:-

public JsonResult LoadRelatedIPs(string searchterm, string Searchby)
        {

            var ITsysips = repository.getTechnologyIPs(searchterm, Searchby).Select(a => a.IPAddress).ToList();


            var it360ips = repository.getIT360TechnologyIPs(searchterm, Searchby).Select(a => a.IPADDRESS).ToList();

            var join = ITsysips.Union(it360ips).ToList();
            var CSData = join.Select(m => new SelectListItem()
            {
                Text = m,
                Value = m,

            });

            return Json(CSData.OrderBy(a => a.Text), JsonRequestBehavior.AllowGet);


        }
 public partial class ITsysSwitchPort
    {
        public int TechnologyID { get; set; }
        public int SwitchID { get; set; }
        public string PortNumber { get; set; }
        public Nullable<int> ITsysTechnologyIPID { get; set; }
        public Nullable<long> IT360NetworkID { get; set; }

        public virtual Technology Technology { get; set; }
        public virtual TechnologyIP TechnologyIP { get; set; }
        public virtual ITsysSwitch ITsysSwitch { get; set; }


  }
但我面临的问题是,当我将值发回控制器时,我无法确定IP的位置,为此,我需要查询两个数据库以了解IP地址的来源,我的模型如下所示:-

public JsonResult LoadRelatedIPs(string searchterm, string Searchby)
        {

            var ITsysips = repository.getTechnologyIPs(searchterm, Searchby).Select(a => a.IPAddress).ToList();


            var it360ips = repository.getIT360TechnologyIPs(searchterm, Searchby).Select(a => a.IPADDRESS).ToList();

            var join = ITsysips.Union(it360ips).ToList();
            var CSData = join.Select(m => new SelectListItem()
            {
                Text = m,
                Value = m,

            });

            return Json(CSData.OrderBy(a => a.Text), JsonRequestBehavior.AllowGet);


        }
 public partial class ITsysSwitchPort
    {
        public int TechnologyID { get; set; }
        public int SwitchID { get; set; }
        public string PortNumber { get; set; }
        public Nullable<int> ITsysTechnologyIPID { get; set; }
        public Nullable<long> IT360NetworkID { get; set; }

        public virtual Technology Technology { get; set; }
        public virtual TechnologyIP TechnologyIP { get; set; }
        public virtual ITsysSwitch ITsysSwitch { get; set; }


  }
公共部分类ITsysSwitchPort
{
public int TechnologyID{get;set;}
public int SwitchID{get;set;}
公共字符串端口号{get;set;}
公共可为空的ITSystemTechnologyId{get;set;}
公共可为空的IT360NetworkID{get;set;}
公共虚拟技术技术{get;set;}
公共虚拟技术yip TechnologyIP{get;set;}
公共虚拟ITsysSwitch ITsysSwitch{get;set;}
}
其中ITSystemTechnologyIPID和IT360NetworkID存储来自2个数据库的IP地址ID。(当然,对于某些记录,其中一个值将为null) 所以我的问题是,我是否可以在SelectListitem中传递其他值,其中包含ITSystemTechnologyId和IT360NetworkID?这样我就不需要查询数据库来重新检查ip位置了? 当前在我的视图中,使用名为generalIP的字段显示IP地址下拉列表,如下所示,该字段在运行时使用jQuery填充:-

 <span class="f">Site @Html.DisplayNameFor(model=>model.GeneralIP)</span>
        @Html.DropDownListFor(model => model.GeneralIP, Enumerable.Empty<SelectListItem>())
  @Html.ValidationMessageFor(model => model.GeneralIP) 
Site@Html.DisplayNameFor(model=>model.GeneralIP)
@Html.DropDownListFor(model=>model.GeneralIP,Enumerable.Empty())
@Html.ValidationMessageFor(model=>model.GeneralIP)
感谢元素的
语法如下:

<option value="value-of-option"
        label="display-text-of-option"
>
  option-content
</option>

选项内容
选项的显示文本是
元素的内容或其
标签
属性的值。
标签
属性优先于内容使用

如果不存在
value
属性,则选项的值(随表单提交的内容)为显示文本。如果存在
属性,则其值将与表单一起提交

您可以在
value
属性中放入任何您想要的内容:如果您想要将整个对象实例的序列化和加密表示编码为
值,您可以[理论上]这样做

当表单提交给服务器时,该值的含义和解释完全取决于接收应用程序

所以,是的,你可以按你的要求去做。您可能需要考虑将内部数据发送到客户端的安全影响。建议对选项值进行加密,以防止用户代理乱搞。

元素的语法大致如下:

<option value="value-of-option"
        label="display-text-of-option"
>
  option-content
</option>

选项内容
选项的显示文本是
元素的内容或其
标签
属性的值。
标签
属性优先于内容使用

如果不存在
value
属性,则选项的值(随表单提交的内容)为显示文本。如果存在
属性,则其值将与表单一起提交

您可以在
value
属性中放入任何您想要的内容:如果您想要将整个对象实例的序列化和加密表示编码为
值,您可以[理论上]这样做

当表单提交给服务器时,该值的含义和解释完全取决于接收应用程序


所以,是的,你可以按你的要求去做。您可能需要考虑将内部数据发送到客户端的安全影响。建议对选项值进行加密,以防止用户代理在其中捣乱。

一种方法是将字符串连接到
值中,以便您拥有ID和IP

e、 g.
id+“-”+IP

然后,当您发布到控制器时,从
-
中拆分字符串,您将获得ID和IP地址


但是正如Nicholas Carey所说,选择ListItem=
,它只能有文本和值。

一种方法是将字符串连接到
值中,这样您就有了ID和IP

e、 g.
id+“-”+IP

然后,当您发布到控制器时,从
-
中拆分字符串,您将获得ID和IP地址

但正如Nicholas Carey所说,SelectListItem=
,它只能有文本和值。

用源前缀“标记”数据(选项值)怎么样

var CSData = join.Select(m => new SelectListItem()
{
    Text = m,
    Value = String.Format("{0}_{1}", ITsysips.Contains(m) ? "SysIPs" : "360IPs" ,m),
});
然后,当使用选项中的选定值时,您可以进行如下检查:

if(valueFromOption.StartsWith("SysIPs"))
{
// it is from getTechnologyIPs method
}
else
{
// etc...
}
如何使用源前缀“标记”数据(选项的值)

var CSData = join.Select(m => new SelectListItem()
{
    Text = m,
    Value = String.Format("{0}_{1}", ITsysips.Contains(m) ? "SysIPs" : "360IPs" ,m),
});
然后,当使用选项中的选定值时,您可以进行如下检查:

if(valueFromOption.StartsWith("SysIPs"))
{
// it is from getTechnologyIPs method
}
else
{
// etc...
}

感谢您的回复,但您能否提供一个hwo示例,我可以在我的selectlistitem中传递2个以上的值?您可以使用逗号分隔的值、嵌入的JSON或XML或信息的其他编码作为选项值。但是,它需要被正确地逃脱,以便成为[X] HTML清除(另一个原因,您可能需要考虑编码,例如BASE-64,并且可能加密它)。谢谢您的答复,但是您能提供一个HWO的示例吗?我可以通过我的StuttListITEM传递超过2个值吗?您可以使用逗号分隔的任何值,嵌入JSON或XML,或将信息的其他编码作为选项值。但是,它需要正确地逃脱,以便[X] HTML清除(另一个原因,您可能需要考虑编码,如BASE-64,并可能加密它)。