Ext.NET 部分视图未显示
Ext.NET Partial view is not showing
我有一个显示一系列选项卡的应用程序。其中一个选项卡有一个面板,我想将其分解为部分视图。我的主视图如下所示:
@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);
}
我正在按照示例 here 进行操作,但我不确定自己是否做对了。看起来他们正在将组件直接插入他们创建的面板并将其插入 Items
集合,而我正在创建 GridPanel
并插入另一个 GridPanel
但我是不确定如何在这种情况下正确执行此操作。我应该怎么做?
你这里有两个问题。首先是这一行:
ContainerId = string.Format("ListSubData_{0}", id)
您的页面上需要具有此 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")
你必须像这样将它移动到你的网格面板中:
@(x.GridPanel()
.ID("MyPanel")
.Store(
x.Store()
.ID("MyDataStore")
.AutoLoad(true)
<!-- rest of the code -->
我有一个显示一系列选项卡的应用程序。其中一个选项卡有一个面板,我想将其分解为部分视图。我的主视图如下所示:
@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);
}
我正在按照示例 here 进行操作,但我不确定自己是否做对了。看起来他们正在将组件直接插入他们创建的面板并将其插入 Items
集合,而我正在创建 GridPanel
并插入另一个 GridPanel
但我是不确定如何在这种情况下正确执行此操作。我应该怎么做?
你这里有两个问题。首先是这一行:
ContainerId = string.Format("ListSubData_{0}", id)
您的页面上需要具有此 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")
你必须像这样将它移动到你的网格面板中:
@(x.GridPanel()
.ID("MyPanel")
.Store(
x.Store()
.ID("MyDataStore")
.AutoLoad(true)
<!-- rest of the code -->