Ext.NET:访问列模型中的复杂模型字段



我在 Ext.NET 中显示列时遇到问题。我有以下视图代码:

@(x.Store(
x.Store()
.ID("MyStore")
.AutoLoad(true)
.Proxy(
x.AjaxProxy()
.Url(Url.Action("GetData", "MyController", new { id = Model.Id }))
.Reader(x.JsonReader().RootProperty("data")))
.Model(
x.Model()
.Fields(
x.ModelField()
.Fields(f =>
{
f.Add("Plan.Value", ModelFieldType.String);
f.Add("Plan.IsUrl", ModelFieldType.Boolean);
})
.IsComplex(true)
.Persist(false),
x.ModelField()
.Name("Id")
.Type(ModelFieldType.Int)
.Persist(false)))))
@(x.GridPanel()
.ID("MyPanel")
.StoreID("MyStore")
.Selectable(true)
.HeaderBorders(false)
.ColumnModel(
x.Column()
.DataIndex("Plan.Value")
.Text("Plan")
.Width(500)))

我的控制器如下所示:

public class MyController : Controller
{
private readonly IDataViewModelFactory _storeModelFactory;
public MyController(IDataViewModelFactory factory)
{
if (factory == null)
{
throw new ArgumentNullException("factory");
}
_storeModelFactory = factory;
}
public ActionResult Index(DataListStoreModel model)
{
var viewModel = new DataViewModel
{
Name = model.Name,
Id = model.Id
};
return View(viewModel);
}
public StoreResult GetData(int id)
{
var models = _storeModelFactory.GetStoreResults(id);
return new StoreResult(models);
}
}

我的模型是:

public class Data
{
public UrlTextUnion Plan { get; set; }
public int Id { get; set; }
}
public class UrlTextUnion
{
public string Value { get; set; }
public bool IsUrl { get; set; }
public UrlTextUnion(string value)
{
Value = value;
IsUrl = Uri.IsWellFormedUriString(value, UriKind.Absolute);
}
}

现在,我知道我正在获取数据,如果我添加一个 JavaScript 侦听器,我可以看到record.Data.Valuerecord.Data.IsUrl中有数据,但我模型中的列仍然为空。有人可以告诉我这里发生了什么吗?

这里有两个选项。

1. 将渲染器添加到网格面板中的列:

保持您的商店与示例中相同,并将 GridPanel 中的列模型更改为如下所示的内容:

.ColumnModel(
Html.X().Column()
.Renderer(new Renderer("return record.data.Plan.Value"))
.Text("Plan")
.Width(500)))

2. 修改存储模型和网格面板中的字段:

将映射和名称添加到商店字段:

Html.X().Model()
.Fields(
Html.X().ModelField()
.Name("PlanValue")
.Mapping("Plan.Value")
.Type(ModelFieldType.String)
.Persist(false),
Html.X().ModelField()
.Name("PlanId")
.Mapping("Plan.Id")
.Type(ModelFieldType.Int)
.Persist(false),
Html.X().ModelField()
.Name("Id")
.Type(ModelFieldType.Int)
.Persist(false)))))

并更改网格列模型:

.ColumnModel(
Html.X().Column()
.DataIndex("PlanValue")
.Text("Plan")
.Width(500)))

附言

很可能您应该更改:

.Url(Url.Action("GetData", "MyController", new { id = Model.Id }))

.Url(Url.Action("GetData", "My", new { id = Model.Id }))

最新更新