Ext.net: 如何设置用于更改外键字段的组合框并通过 AutoAsync() 保存?

Ext.net: How to set combobox for change foreign key field and save by AutoAsync()?

我对 GridPanel 有一些疑问。 table 请求中的纵队是一个外键。如何显示用于更改此字段的组合框?此代码显示组合框,但值未设置为 GridPanel 中的字段。当我尝试更改某些字段时,AutoAsync() 出现异常 - 状态代码 500。

@model IEnumerable<GeoSystem.Models.Request>

@(Html.X().Store()
            .ID("BrigadeStore")
            .Model(Html.X().Model()
                .Fields(
                    new ModelField("id", ModelFieldType.Int) { Mapping = "BrigadeID" },
                    new ModelField("name", ModelFieldType.String) { Mapping = "BrigadeName" }
                )
            )
            .Proxy(Html.X().AjaxProxy()
                .Url(Url.Action("GetBrigades"))
                .Reader(Html.X().JsonReader().RootProperty("data"))
            )
)

@(Html.X().GridPanel()
            .ID("GridPanelRequest")
            .Store(
                Html.X().StoreForModel().ID("StoreRequest")
                .AutoSync(true)
                    .ShowWarningOnFailure(false)                    
                    .SyncUrl(Url.Action("RequestHandleChanges"))
            )
            .Icon(Icon.Table)
            .Frame(true)
            .Title("Заявки")
            .Height(430)
            .Width(500)
            .StyleSpec("margin-top: 10px;")
            .ColumnModel(       
                Html.X().ColumnFor(Model, m => m.RequestName)
                    .ToBuilder<Column.Builder>()
                    .Flex(1)
                    .Editor(
                        Html.X().TextField().AllowBlank(false)
                    ),

                Html.X().ColumnFor(Model, m => m.Start)
                    .ToBuilder<Column.Builder>()
                    .Flex(1)
                    .Editor(
                        Html.X().TextField().AllowBlank(false)
                    ),

                Html.X().ColumnFor(Model, m => m.Brigade.BrigadeName)
                    .ToBuilder<Column.Builder>()
                    .Flex(1)
                    .Editor(
                        Html.X().ComboBox()
                        .QueryMode(DataLoadMode.Remote)
                        .TriggerAction(TriggerAction.All)
                        .StoreID("BrigadeStore")
                        .ValueField("id")
                        .DisplayField("name")
                    )
            )
            .Plugins(
                Html.X().CellEditing()
            )
)

ComboBox的问题我是这样解决的。 为组合框的商店添加了一个新的 class。控制器 returns 此对象的列表。

public class BrigadeComboBox
{
    public string BrigadeName;
    public Brigade Brigade;
}

然后StoreComboBox实现像

@(Html.X().Store()
            .ID("BrigadeStore")
            .Model(Html.X().Model()
                .Fields(
                    new ModelField("brigade", ModelFieldType.Object) { Mapping = "Brigade" },
                    new ModelField("BrigadeName", ModelFieldType.String) { Mapping = "BrigadeName" }
                )
            )
            .Proxy(Html.X().AjaxProxy()
                .Url(Url.Action("GetBrigades"))
                .Reader(Html.X().JsonReader().RootProperty("data"))
            )
)

在商店模型字段中添加了 GridPanel

new ModelField()
    {
        Name = "Brigade",
        Type = ModelFieldType.Object
    }

ColumnFor 我将其替换为 Column

Html.X().Column()
    .Text("Бригада")
    .DataIndex("Brigade")

ColumnModel 中的 ColumnEditor

.Editor(Html.X().ComboBox()
    .QueryMode(DataLoadMode.Remote)
    .TriggerAction(TriggerAction.All)
    .StoreID("BrigadeStore")
    .ValueField("brigade")
    .DisplayField("BrigadeName"))

我还为 Column

添加了 .Renderer("brigadeRenderer")
var brigadeRenderer = function (value) {
            if (!Ext.isEmpty(value)) {
                return value.BrigadeName;
            }

            return value;
        };

但这并没有解决 AsyncTask 的问题。