【问题标题】:Devexpress 12.1 MVC GridView Inside Tab Strip IssuesDevexpress 12.1 MVC GridView Inside Tab Strip 问题
【发布时间】:2012-07-01 03:59:39
【问题描述】:

我是一名实习生,从来没有做过任何网络开发,所以你知道我来自哪里。我目前正在尝试使用 devexpress 12.1 工具学习 asp.NET MVC 3。我从一个模板开始,该模板在链接到 Northwind db 的内容区域中有一个 devexpress gridview。它自己工作,但是当我创建一个 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());
}   

查找视图(索引):

@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()

【问题讨论】:

  • 你能告诉我们你的_GridViewPartial吗?
  • 糟糕。谢谢@ScottieMc。我的意思是在原始帖子中有这个。现已添加。
  • 希望这将为您指明正确的方向。查看CallbackPanel 控件和客户端TabStrip events。您应该能够使用 ActiveTabChanged 客户端事件来强制 CallbackPanel 呈现。

标签: c# asp.net-mvc-3 gridview devexpress


【解决方案1】:

打开选项卡时,您缺少 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会运行回调,正确抓取数据。但是最好通过单步执行代码来找出为什么数据没有被发送下来。

【讨论】:

    猜你喜欢
    • 2012-07-11
    • 2014-12-06
    • 2011-12-20
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多