我正在处理两个存储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);
}
但我遇到的问题是,当我将值发回给我的控制器时,我无法确定IP的位置,为此我需要查询两个数据库以了解IP地址的来源,我的模型如下: -
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; }
}
ITsysTechnologyIPID&amp; IT360NetworkID存储来自2个数据库的IP地址的ID。(当然对于某些记录,其中一个值将为null) 所以我的问题是我可以在我的SelectListitem中传递额外的值,包含ITsysTechnologyIPID&amp; 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)
由于
答案 0 :(得分:2)
<option>
元素具有以下语法:
<option value="value-of-option"
label="display-text-of-option"
>
option-content
</option>
该选项的显示文字是<option>
元素的内容或其label
属性的值。 label
属性优先于内容使用。
如果不存在value
属性,则选项的值(随表单提交的内容)是显示文本。如果存在value
属性,则使用表单提交其值。
您可以将任意内容放入value
属性中:如果您想将整个对象实例的序列化和加密表示编码为value
的{{1}},则可以[理论上]这样做。
当表单提交给服务器时,该值的含义和解释完全取决于接收应用程序。
所以,是的,你可以做你所要求的。您可能想要考虑将内部数据发送到客户端的安全隐患。可能会建议加密选项值,以防止用户代理弄乱它。
答案 1 :(得分:1)
一种方法是将字符串加入Value
,以便拥有ID和IP。
e.g。 id+"-"+IP
然后当您发布到控制器时,从-
拆分字符串,您将拥有ID和IP地址。
但正如Nicholas Carey所说,SelectListItem = <option>
只能有文字&amp;值。
答案 2 :(得分:1)
如何用源前缀“标记”数据(选项的值)?
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...
}