我想使用属性 tokenBoxSettings.Properties.DataSource
从数据库填充TokenBoxTokenBoxView.cshtml
groupSettings.Items.Add(
formLayoutSettings.Items.Add(i =>
{
i.FieldName = "email";
i.Caption = "Email";
i.NestedExtensionType = FormLayoutNestedExtensionItemType.TokenBox;
TokenBoxSettings tokenBoxSettings = (TokenBoxSettings) i.NestedExtensionSettings;
tokenBoxSettings.Width = 350;
//data binding
tokenBoxSettings.Properties.DataSource = mainController.GetMails();
tokenBoxSettings.Properties.TextField = "email_empresarial";
tokenBoxSettings.Properties.ValueField = "email_empresarial";
tokenBoxSettings.Properties.IncrementalFilteringMode = IncrementalFilteringMode.Contains;
tokenBoxSettings.Properties.ValueSeparator = ';';
})
);
TokenBoxController.cs
//mainController
//I created a dictionary based on the result of select
public Dictionary<string, string> GetMails()
{
var email = db.usuario.ToList().Select(e => new { e.email_empresarial });
var emails = new Dictionary<string, string>();
foreach (var mail in email)
{
correos.Add(mail.ToString(), mail.ToString());
}
return emails;
}
但是它显示了&#34;对象显式&#34;,我只需要值,例如 kenneth 或 manuel
我做错了什么?或者我可以用其他方法做什么?
答案 0 :(得分:1)
您为email_empresarial
和tokenBoxSettings.Properties.TextField
指定了相同的tokenBoxSettings.Properties.ValueField
字段名称。
由于您将TokenBox绑定到词典,请尝试更改TextField
和ValueField
的设置以引用词典键和值,如下所示:
tokenBoxSettings.Properties.TextField = "Value";
tokenBoxSettings.Properties.ValueField = "Key";
此外,在GetMail()
方法中,您已声明var emails
,但在循环中,您正在向未声明的correos
变量添加项目。你确定这里没有错误吗?
另一个注意事项,在GetMails()
返回的词典中,您使用相同的值mail.ToString()
填充字典键和值。你确定你真的需要使用Dictionary来绑定你的TokenBox吗?如果键和值相等,您可以尝试使用普通List<string>
。