Частичное представление Ext.NET не отображается - PullRequest
0 голосов
/ 06 октября 2018

У меня есть приложение, которое показывает серию вкладок.Одна такая вкладка имеет панель, которую я хочу разложить на частичные представления.Мой основной вид выглядит так:

@model MyModel
@{
    var x = Html.X();
}

@(x.Panel()
    .Layout(LayoutType.Fit)
    .Items(i =>
    {
        i.Add(new GridPanel
        {
            Region = Region.West,
            Layout = LayoutType.Fit.ToString(),
            Loader = x.ComponentLoader()
                .Url(Url.Action("ListSubData", "My"))
                .Mode(LoadMode.Script)
                .Params(new { id = Model.Id })
        });
    }))

Мое подпредставление выглядит так:

@model int
@{
    var x = Html.X();
}

@(x.Store(
    x.Store()
        .ID("MyDataStore")
        .AutoLoad(true)
        .Proxy(
            x.AjaxProxy()
                .Url(Url.Action("GetData", "My", new { id = Model }))
                .Reader(x.JsonReader().RootProperty("data")))
        .Model(
            x.Model()
                .Fields(
                    x.ModelField()
                        .Name("Description")
                        .Type(ModelFieldType.String),
                    x.ModelField()
                        .Name("Category")
                        .Type(ModelFieldType.String),
                    x.ModelField()
                        .Name("Id")
                        .Type(ModelFieldType.Int)))))

@(x.GridPanel()
    .ID("MyPanel")
    .StoreID("MyDataStore")
    .ColumnModel(
        x.Column()
            .DataIndex("Description")
            .Text("Name"),
        x.Column()
            .DataIndex("Category")
            .Text("Category")))

А мой контроллер выглядит так:

public class MyController : Controller
{
    private readonly IStoreModelFactory _myStoreModelFactory;

    public DashboardController(IStoreModelFactory factory)
    {
        _myStoreModelFactory= factory;
    }

    public ActionResult Index(MyStoreModel model)
    {
        var viewModel = new MyViewModel
        {
            Name = model.Name,
            Id = model.Id
        };

        return View(viewModel);
    }

    public Ext.Net.MVC.PartialViewResult ListSubData(int id)
    {
        return new Ext.Net.MVC.PartialViewResult
        {
            RenderMode = RenderMode.AddTo,
            Model = id,
            ContainerId = string.Format("ListSubData_{0}", id),
            WrapByScriptTag = false
        };
    }

    public StoreResult GetData(int id)
    {
        var models = _myStoreModelFactory.GetStoreResults(id);
        return new StoreResult(models);
    }

Я следилпример здесь но я не уверен, что делаю все правильно.Похоже, что они вставляют компонент непосредственно на созданную ими панель и вставляют его в коллекцию Items, тогда как я создаю GridPanel и вставляю в другой GridPanel, но я не уверен, как это сделать.прямо в этом контексте.Как мне это сделать?

1 Ответ

0 голосов
/ 06 октября 2018

У вас есть две проблемы здесь.Сначала в этой строке:

ContainerId = string.Format("ListSubData_{0}", id)

Вам нужен элемент с этим идентификатором на вашей странице, чтобы вы могли отобразить в нем свой контент.В общем, вам нужно изменить этот метод на:

public Ext.Net.MVC.PartialViewResult ListSubData(int id)
{
    return new Ext.Net.MVC.PartialViewResult
    {
        RenderMode = RenderMode.AddTo,
        Model = id,
        ContainerId = "MyContainerId",
        WrapByScriptTag = false
    };
}

, а затем изменить основной вид на:

@(x.Panel()
    .ID("MyContainerId")
    .Layout(LayoutType.Fit)
    .Items(i =>
    <!-- rest of the code -->

Вторая проблема связана с сохранением в режиме частичного просмотра.Вместо использования .StoreID("MyDataStore") вы должны переместить его внутрь своей Grid Panel следующим образом:

@(x.GridPanel()
    .ID("MyPanel")
    .Store(
        x.Store()
            .ID("MyDataStore")
            .AutoLoad(true)
            <!-- rest of the code -->
...