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

Asp.net mvc Ext.net:如何设置更改外键字段的组合框并通过AutoAsync()保存?,asp.net-mvc,ext.net,Asp.net Mvc,Ext.net,我对GridPanel有些问题。表请求中的列是外键。如何显示更改此字段的组合框?此代码显示了组合框,但值未设置为GridPanel中的字段。当我试图更改某些字段时,AutoAsync()会得到一个异常状态代码500 @model IEnumerable<GeoSystem.Models.Request> @(Html.X().Store() .ID("BrigadeStore") .Model(Html.X().Model()

我对GridPanel有些问题。表请求中的列是外键。如何显示更改此字段的组合框?此代码显示了组合框,但值未设置为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()
            )
)
@model IEnumerable
@(Html.X().Store())
.ID(“旅店”)
.Model(Html.X().Model())
.菲尔德(
新的ModelField(“id”,ModelFieldType.Int){Mapping=“BrigadeID”},
新建模型字段(“名称”,ModelFieldType.String){Mapping=“BrigadeName”}
)
)
.Proxy(Html.X().AjaxProxy())
.Url(Url.Action(“GetBrigades”))
.Reader(Html.X().JsonReader().RootProperty(“数据”))
)
)
@(Html.X().GridPanel())
.ID(“请求”)
.商店(
Html.X().StoreForModel().ID(“StoreRequest”)
.自动同步(真)
.显示警告失败(错误)
.SyncUrl(Url.Action(“RequestHandleChanges”))
)
.Icon(Icon.Table)
.帧(真)
.标题(“аааааааааа”)
.身高(430)
.宽度(500)
.StyleSpec(“页边距顶部:10px;”)
.ColumnModel(
Html.X().ColumnFor(Model,m=>m.RequestName)
.ToBuilder()
.Flex(1)
.编辑(
Html.X().TextField().AllowBlank(false)
),
Html.X().ColumnFor(Model,m=>m.Start)
.ToBuilder()
.Flex(1)
.编辑(
Html.X().TextField().AllowBlank(false)
),
Html.X().ColumnFor(模型,m=>m.battle.BrigadeName)
.ToBuilder()
.Flex(1)
.编辑(
Html.X().ComboBox()
.QueryMode(DataLoadMode.Remote)
.triggeration(triggeration.All)
.StoreID(“BrigadeStore”)
.ValueField(“id”)
.DisplayField(“名称”)
)
)
.插件(
Html.X().CellEditing()
)
)

组合框的问题我用这种方法解决了。 为combobox的存储添加了一个新类。控制器返回此对象的列表

public class BrigadeComboBox
{
    public string BrigadeName;
    public Brigade Brigade;
}
然后
组合框
存储

@(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
    }
我用Column替换了它

Html.X().Column()
    .Text("Бригада")
    .DataIndex("Brigade")
ColumnModel
列的
编辑器

.Editor(Html.X().ComboBox()
    .QueryMode(DataLoadMode.Remote)
    .TriggerAction(TriggerAction.All)
    .StoreID("BrigadeStore")
    .ValueField("brigade")
    .DisplayField("BrigadeName"))
我还为
列添加了
.Renderer(“Brigaderender”)

var brigadeRenderer = function (value) {
            if (!Ext.isEmpty(value)) {
                return value.BrigadeName;
            }

            return value;
        };

但这并不能解决AsyncTask的问题。

500代表“内部服务器错误”。您可以添加异常详细信息吗?我尝试
var onStoreException=function(proxy,response,operation){var error=operation.getError(),message=Ext.isString(error)?错误:('('+error.status+'))'+error.statusText);Ext.net.Notification.show({iconCls:'图标感叹号',html:message+“\n
代理类型:“+Proxy.type,标题:'异常',可滚动:'两者',隐藏显示:5000,宽度:300,高度:200});};
.Listeners(l=>{l.Exception.Fn=“onStoreException”;l.Exception.Buffer=10;})
但它没有什么可显示的。