【问题标题】:Ext.net: How to set combobox for change foreign key field and save by AutoAsync()?Ext.net:如何设置组合框以更改外键字段并通过 AutoAsync() 保存?
【发布时间】:2020-03-16 18:20:25
【问题描述】:

我对 GridPanel 有一些问题。表 Request 中的列 Brigade 是一个外键。如何显示组合框以更改此字段?此代码显示组合框,但值未设置为 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()
            )
)

【问题讨论】:

  • 500 代表“内部服务器错误”。您可以添加异常详细信息吗?
  • 我试试var onStoreException = function (proxy, response, operation) { var error = operation.getError(), message = Ext.isString(error) ? error : ('(' + error.status + ')' + error.statusText); Ext.net.Notification.show({ iconCls: 'icon-exclamation', html: message + "\n&lt;br /&gt;&lt;b&gt;Proxy type:&lt;/b&gt; " + proxy.type, title: 'EXCEPTION', scrollable: 'both', hideDelay: 5000, width: 300, height: 200 }); };
  • .Listeners(l =&gt; { l.Exception.Fn = "onStoreException"; l.Exception.Buffer = 10; }) 但没什么可显示的。

标签: asp.net-mvc ext.net


【解决方案1】:

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

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")

Editor for Column in ColumnModel

.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 的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    相关资源
    最近更新 更多