我是一名从未进行任何网络开发的实习生,所以你知道我来自哪里。我目前正在尝试使用devexpress 12.1工具学习asp.NET MVC 3。我开始使用的模板在内容区域中具有devexpress gridview,该模板链接到Northwind数据库。它本身就可以工作,但是当我创建一个devexpress标签条并将gridview放在第二个标签内时,我会得到列标题,但是没有显示数据。当我单击列标题以对数据进行排序时显示出来。我希望在单击选项卡后加载gridview,而不是在页面加载时加载。也许我的回调是问题所在。我的标签条使用ajax回调,gridview也用于分页。我已将模型添加到TabControlPartial页面,并在控制器中传递TabControlPartial操作的模型。我曾尝试在mvc.devexpress.com上观看演示,但没有任何东西可以将两者结合在一起。我不是100%理解将模型传递到视图中我猜。我知道这很简单,但我不知道该怎么做。谢谢你的帮助。
控制器(这可能是我的问题):
public ActionResult LookUp()
{
return View(NorthwindDataProvider.GetCustomers());
}
public ActionResult _TabControlPartial()
{
return PartialView("_TabControlPartial", NorthwindDataProvider.GetCustomers());
}
public ActionResult _GridViewPartial()
{
return PartialView("_GridViewPartial", NorthwindDataProvider.GetCustomers());
}
LookUp View(索引):
@model System.Collections.IEnumerable
@Html.Partial("_TabControlPartial", Model)
Tab Partial:
@model System.Collections.IEnumerable
@Html.DevExpress().PageControl(
settings =>
{
settings.Name = "TabControl";
settings.Width = System.Web.UI.WebControls.Unit.Percentage(100);
settings.Height = System.Web.UI.WebControls.Unit.Percentage(100);
settings.CallbackRouteValues = new { Controller = "Customers", Action =
"_TabControlPartial" };
settings.TabPages.Add(
tabOne =>
{
tabOne.Name = "TabOne";
tabOne.Text = "Start";
tabOne.SetContent(() =>
{
ViewContext.Writer.Write("Start");
});
});
settings.TabPages.Add(
tabTwo =>
{
tabTwo.Name = "TabTwo";
tabTwo.Text = "Customer List";
tabTwo.SetContent(() =>
{
Html.RenderPartial("_GridViewPartial", Model);
});
});
}).GetHtml()
GridView Partial:
@Html.DevExpress().GridView(
settings =>
{
settings.Name = "GridView";
settings.CallbackRouteValues = new { Controller = "Customers", Action =
"_GridViewPartial" };
settings.Width = System.Web.UI.WebControls.Unit.Percentage(100);
settings.Height = System.Web.UI.WebControls.Unit.Percentage(100);
settings.SettingsPager.Visible = true;
settings.SettingsPager.PageSize = 15;
settings.ControlStyle.Paddings.Padding = System.Web.UI.WebControls.Unit.Pixel(0);
settings.ControlStyle.Border.BorderWidth = System.Web.UI.WebControls.Unit.Pixel(0);
settings.ControlStyle.BorderBottom.BorderWidth =
System.Web.UI.WebControls.Unit.Pixel(1);
//Configure grid's columns in accordance with data model fields
settings.Columns.Add("ContactName");
settings.Columns.Add("Address");
settings.Columns.Add("City");
settings.Columns.Add("PostalCode");
settings.Columns.Add("Phone");
}).Bind(Model).GetHtml()
答案 0 :(得分:0)
打开选项卡时,您缺少GridView中的数据。打开页面时,需要在返回的模型中加载GridView的数据。现在你加载页面(在LookUp中),但你没有推送网格的数据。每当发生回调时,只有在那一点上数据才会从数据库中拉出并返回到屏幕(注意你只返回回调方法_TabControlPartial和_GridViewPartial中的数据)。排序列或过滤器等时,会触发回调并从服务器返回数据。
您拥有的代码看起来是正确的,但在此过程中,模型正在失去它的价值。最好的选择是在选项卡控件,网格绑定和控制器中放置一个断点,并确保在绑定时所需的数据就位。
当激活标签时,您可以通过回拨来“欺骗”,例如:
@Html.DevExpress().PageControl(
settings =>
{
settings.Name = "TabControl";
settings.ClientSideEvents.Init = "TabControl_Init";
...
}).GetHtml()
并且在JavaScript中有:
function TabControl_Init(s, e) {
GridView.PerformCallback();
}
这样,在初始化选项卡之后,GridView将运行回调,并正确获取数据。但最好通过逐步完成代码来弄清楚为什么数据不会被首先发送下去。