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;
}
然后Store
为ComboBox
实现像
@(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
中的 Column
的 Editor
是
.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 的问题。
我对 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;
}
然后Store
为ComboBox
实现像
@(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
中的 Column
的 Editor
是
.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 的问题。