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
;