代码之家  ›  专栏  ›  技术社区  ›  Woody1193 Nimmi Rashinika

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

  •  1
  • Woody1193 Nimmi Rashinika  · 技术社区  · 6 年前

    我无法在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);
        }
    }
    

    record.Data.Value record.Data.IsUrl 其中包含数据,但模型中的列仍为空。有人能告诉我这是怎么回事吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Peska    6 年前

    你有两个选择。

    1.将渲染器添加到GridPanel中的列:

    保持您的商店如示例所示,并将GridPanel中的ColumnModel更改为以下内容:

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

    2.在Store Model和GridPanel中修改字段:

    将映射和名称添加到存储字段:

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