Asp.net mvc 值不能为null。参数名称:items。在剑道UI网格中查看外键
我有一个包含许多外键列的网格。现在只有键显示,但我需要正确的数据,如中所示 以下代码是我填充网格的代码:Asp.net mvc 值不能为null。参数名称:items。在剑道UI网格中查看外键,asp.net-mvc,kendo-ui,kendo-grid,argumentnullexception,Asp.net Mvc,Kendo Ui,Kendo Grid,Argumentnullexception,我有一个包含许多外键列的网格。现在只有键显示,但我需要正确的数据,如中所示 以下代码是我填充网格的代码: public partial class RuleEntry { public RuleEntry() { this.RuleEntriesCases = new HashSet<RuleEntriesCas>(); } [Key] public int ID { get; set; } public string
public partial class RuleEntry
{
public RuleEntry()
{
this.RuleEntriesCases = new HashSet<RuleEntriesCas>();
}
[Key]
public int ID { get; set; }
public string Country { get; set; }
public Nullable<int> Family { get; set; }
public Nullable<int> IP { get; set; }
public string RuleKey { get; set; }
public Nullable<int> Status { get; set; }
public string Title { get; set; }
[ForeignKey("Country")]
internal virtual Country Country1 { get; set; }
[ForeignKey("Family")]
internal virtual Family Family1 { get; set; }
[ForeignKey("IP")]
internal virtual IP IP1 { get; set; }
[ForeignKey("Status")]
internal virtual RuleStatus RuleStatus { get; set; }
[ScriptIgnore]
internal virtual ICollection<RuleEntriesCas> RuleEntriesCases { get; set; }
}
但是columns.ForeignKey行会生成难以调试的错误
值不能为null。
参数名称:items
我不知道如何解决这个问题,谷歌也不会给我任何相关的答案。谢谢 您需要指定外键的id,而不是导航属性: 这应该可以解决这个问题:
columns.ForeignKey(
r => r.Country.Code,
( IEnumerable ) ViewData["Countries"],
"Code",
"Name"
);
使用此重载的GridColumnFactory.ForeignKey()
公共虚拟GridBoundColumnBuilder外键(
表情表情,
i可数数据,
字符串dataFieldValue,
字符串数据字段文本
;
谢谢你的回答,我担心这会产生一个错误:“无法将lambda表达式转换为'string'类型,因为它不是委托类型”。知道如何解决这个问题吗?谢谢你的更新,但我仍然会遇到相同的lambda表达式错误。我的代码和你的代码之间的唯一区别是“System.Collections.IEnumerable",这应该是同一件事?是的,那应该可以工作-令人困惑!你的模型是IEnumerable
类型的吗?不,它是DbSet。试图将它们更改为IEnumerable,但产生了很多错误。还添加了我的模型代码。这应该可以-DbSet
实现IEnumerable
。你能仔细检查你的代码吗是吗?我不明白你为什么会犯这样的错误。
public partial class Country
{
public Country()
{
this.RuleEntries = new HashSet<RuleEntry>();
}
[Key]
public string Code { get; set; }
public string Name { get; set; }
public virtual ICollection<RuleEntry> RuleEntries { get; set; }
}
@(Html.Kendo().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
columns.ForeignKey(r => r.Country, (System.Collections.IEnumerable)ViewData["Countries"], "Code", "Name")
.Title("Country").Width(150);
columns.Bound(p => p.Family);
columns.Bound(p => p.IP);
columns.Bound(p => p.RuleKey);
columns.Bound(p => p.Status);
columns.Bound(p => p.Title);
})
.Groupable()
.Editable(editable => editable.Mode(GridEditMode.InCell))
.Sortable()
.Scrollable(s => s.Height("auto"))
.Filterable()
.ColumnMenu()
.DataSource(dataSource => dataSource
.Ajax()
.Batch(true)
.ServerOperation(false)
.Model(model => model.Id(p => p.ID))
))
columns.ForeignKey(
r => r.Country.Code,
( IEnumerable ) ViewData["Countries"],
"Code",
"Name"
);
public virtual GridBoundColumnBuilder<TModel> ForeignKey<TValue>(
Expression<Func<TModel, TValue>> expression,
IEnumerable data,
string dataFieldValue,
string dataFieldText
;