如何为 Kendo 网格中的外键列设置默认值?

How can I set default value for a foreign key colum in Kendo Grid?

在 Kendo 网格中有一个外键列,我从 ViewData 中检索 select 列表。 Grid的编辑模式是InLine.

当我想添加一条新记录时,第一项是selected。如果我不更改它并且不 select 任何其他内容,则列的值在服务器端将是 null

如何为此列指定默认值?请注意,ID 是用户生成的,我无法猜测第一个项目是哪个 ID。

这是网格:

@(Html.Kendo().Grid<InvtMat>()
    .Name("BOM")
    .Columns(columns =>
    {
        columns.ForeignKey(x => x.CGoodCode, (IEnumerable)ViewData["Goods"], "Id", "Text");
        // removed for brevity
        columns.Command(command => { command.Edit(); command.Destroy(); });
    })
    .ToolBar(toolbar =>
    {
        toolbar.Create();
    })
    .Editable(edit => edit.Mode(GridEditMode.InLine))
    .DataSource(ds => 
        ds.Ajax()
        .Model(model =>
        {
            model.Id(x => x.CGoodCode);
            model.Id(x => x.CGoodCode1);
        })
    )
)

您可以在 DataSource.Model 部分为网格模型设置默认值。

这是一个例子:

.DataSource(ds => 
    ds.Ajax()
    .Model(model =>
    {
            model.Id(x => x.CGoodCode);
            model.Field(x => x.CGoodCode).DefaultValue(0);
    })
)

因为你不知道你必须在那里写什么默认值,所以你应该在定义网格之前先找到它。我想你的控制器里有这样的东西:

var goods = // get goods from DB.
var goodsDV= goods.First().Id;

ViewData["Goods"] = goods;
ViewData["GoodsDefaultValue"] = goodsDV;

或者您也可以在剃刀视图中执行此操作

@{
    var firstGood = ((IEnumerable<Good>)ViewData["Goods"]).First();
    ViewData["GoodsDefaultValue"] = firstGood.Id;
}

那就这样用吧

model.Field(x => x.CGoodCode).DefaultValue(ViewData["GoodsDefaultValue"]);

简单吧?!