Kendo ui 如何在剑道网格中设置外键列的默认值?

Kendo ui 如何在剑道网格中设置外键列的默认值?,kendo-ui,kendo-grid,kendo-asp.net-mvc,Kendo Ui,Kendo Grid,Kendo Asp.net Mvc,在剑道网格中有一个外键列,我从ViewData检索选择列表。网格的编辑模式是InLine 当我想添加新记录时,第一项被选中。如果我不更改它,也不选择任何其他内容,则在服务器端,列的值将为null 如何为此列指定默认值?请注意,ID是用户生成的,我无法猜测哪个ID将成为第一项 这是网格: @(Html.Kendo().Grid<InvtMat>() .Name("BOM") .Columns(columns => { columns.For

在剑道网格中有一个外键列,我从
ViewData
检索选择列表。网格的编辑模式是
InLine

当我想添加新记录时,第一项被选中。如果我不更改它,也不选择任何其他内容,则在服务器端,列的值将为
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);
        })
    )
)
@(Html.Kendo().Grid())
.名称(“BOM”)
.列(列=>
{
columns.ForeignKey(x=>x.CGoodCode,(IEnumerable)ViewData[“货物],“Id”,“文本”);
//为简洁起见,请删除
Command(Command=>{Command.Edit();Command.Destroy();});
})
.ToolBar(ToolBar=>
{
toolbar.Create();
})
.edit(编辑=>edit.Mode(GridEditMode.InLine))
.DataSource(ds=>
ds.Ajax()
.Model(Model=>
{
Id(x=>x.CGoodCode);
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;
或者您也可以在razor视图中执行此操作

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

放松点,对吧

是的,我知道。但它对外键不起作用,因为它显示一个下拉列表。它不起作用,因为您指定的默认值与FK数据源中的所有值都不匹配。请参阅我的最新答案。:)谢谢Dion,实际上我没有在我的控制器中指定默认值,因为我没有!我只想能够提交表单而不改变值。目前我得到一个空值。也许我应该更改代码以始终选择第一项?您不能更改控制器吗?你也可以在razor view中这样做。。查看我的更新答案当您设置了默认值时,第一次编辑数据时,它将不会为
null
,因为在编辑模式下,它会尝试查找与给定默认值匹配的值,但无法找到。因此,该值再次重置为
null
。因此,我建议您必须从控制器中找到第一项
Id
,或者您可以直接在razor视图中找到。但我更喜欢在控制器内部这样做。
model.Field(x => x.CGoodCode).DefaultValue(ViewData["GoodsDefaultValue"]);