2012-06-29 64 views
2

我是一名从未做过任何Web开发的实习生,所以您知道我来自哪里。我目前正在尝试使用devexpress 12.1工具来学习asp.net MVC 3。我开始使用一个模板,该模板在链接到Northwind db的内容区域中具有devexpress gridview。它本身是有效的,但是当我创建一个devexpress选项卡条并将gridview放置在第二个选项卡中时,我会得到列标题,但是不会显示任何数据。当我点击一个列标题来排序数据显示。我想在点击选项卡后加载gridview,而不是在页面加载时加载。也许我的回调是问题。我的标签条使用ajax回调,gridview也是用于分页。我已经将该模型添加到TabControlPartial页面,并在TabControlPartial操作的控制器中的模型中传递。我试着在mvc.devexpress.com上观看演示,但没有任何东西将两者结合在一起。我不会100%理解将模型传递给我的观点。我知道这很简单,但我不知道该怎么做。谢谢你的帮助。Devexpress 12.1 MVC GridView Inside Tab Strip问题


控制器(这可能是我的问题):

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() 
+0

你能告诉我们你的'_GridViewPartial'吗? – ScottieMc

+0

糟糕。谢谢@ScottieMc。我的意思是在原始文章中有。现在添加。 – jrob42

+0

希望这会为您指出正确的方向。查看[CallbackPanel](http://www.devexpress.com/Support/Center/p/E2927.aspx)控件和客户端[TabStrip events](http://mvc.devexpress.com/TabControl/ClientSideAPI )。您应该能够使用“ActiveTabChanged”客户端事件强制CallbackPanel进行呈现。 – ScottieMc

回答

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将运行回调,并正确获取数据。但是,通过逐步完成代码,找出为什么数据没有被首先发送出去会更好。