我是一名实习生,从未进行过任何网络开发,所以您知道我来自哪里。我目前正在尝试使用 devexpress 12.1 工具学习 asp.NET MVC 3。我从一个模板开始,该模板在链接到 Northwind 数据库的内容区域中有一个 devexpress gridview。它自己工作,但是当我创建一个 devexpress 选项卡条并将 gridview 放在第二个选项卡内时,我得到了列标题,但没有显示任何数据。当我单击列标题对显示的数据进行排序时。我希望在单击选项卡后而不是在页面加载时加载 gridview。也许我的回调是问题所在。我的选项卡条使用的是 ajax 回调,而 gridview 也用于分页。我已将模型添加到 TabControlPartial 页面,并在 Controller 中为 TabControlPartial 操作传入模型。我试过查看 mvc.devexpress.com 上的演示,但没有任何东西可以将两者放在一起。我不是 100% 理解将模型传递到我猜的 View 中。我知道这很简单,但我不知道该怎么做。感谢您的帮助。
Controller (这可能是我的问题):
public ActionResult LookUp()
{
return View(NorthwindDataProvider.GetCustomers());
}
public ActionResult _TabControlPartial()
{
return PartialView("_TabControlPartial", NorthwindDataProvider.GetCustomers());
}
public ActionResult _GridViewPartial()
{
return PartialView("_GridViewPartial", NorthwindDataProvider.GetCustomers());
}
查找 View (索引):
@model System.Collections.IEnumerable
@Html.Partial("_TabControlPartial", Model)
标签部分:
@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 :
@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()
最佳答案
打开选项卡时,您丢失了 GridView 中的数据。当您打开页面时,需要将 GridView 的数据加载到返回的模型中。现在您加载页面(在 LookUp 中),但您没有为网格推送数据。每当任何回调发生时,只有在那个时候数据才会从数据库中提取并返回到屏幕(注意您只在回调方法 _TabControlPartial 和 _GridViewPartial 中返回数据)。当您对列或过滤器等进行排序时,将触发回调并从服务器返回数据。
您拥有的代码看起来是正确的,但在流程的某个地方,模型正在失去它的值(value)。最好的选择是在选项卡控件、网格绑定(bind)和 Controller 中放置一个断点,并确保您期望的数据在绑定(bind)时就位。
您可以在选项卡激活时通过回调来“作弊”,例如:
@Html.DevExpress().PageControl(
settings =>
{
settings.Name = "TabControl";
settings.ClientSideEvents.Init = "TabControl_Init";
...
}).GetHtml()
在 JavaScript 中有:
function TabControl_Init(s, e) {
GridView.PerformCallback();
}
这样,在tabs初始化后,GridView会回调,正确抓取数据。但最好先通过单步执行代码来弄清楚为什么数据没有被发送下来。
关于c# - Devexpress 12.1 MVC GridView 内部选项卡条问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11264857/