2

私は Web 開発を行ったことがないインターンです。現在、devexpress 12.1 ツールを使用して asp.NET MVC 3 を学習しようとしています。Northwind データベースにリンクされているコンテンツ領域に devexpress グリッドビューがあるテンプレートから始めました。それ自体は機能しますが、devexpress タブ ストリップを作成し、2 番目のタブ内にグリッドビューを配置すると、列見出しは表示されますが、データは表示されません。列見出しをクリックして並べ替えると、データが表示されます。ページがロードされたときではなく、タブをクリックした後にグリッドビューをロードしたいと思っています。多分私のコールバックが問題です。私のタブストリップはajaxコールバックを使用しており、グリッドビューもページング用です。モデルを TabControlPartial ページに追加し、TabControlPartial アクションのコントローラーにモデルを渡しました。私' mvc.devexpress.com でデモを見てみましたが、この 2 つを結び付けるものは何もありません。私が推測するビューにモデルを渡すことを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()
4

1 に答える 1

0

タブが開いているときに、GridView にデータがありません。ページを開くと、返されるモデルに GridView のデータを読み込む必要があります。現在、(ルックアップで) ページをロードしていますが、グリッドのデータをプッシュしていません。コールバックが発生するたびに、その時点でのみデータがデータベースから取得され、画面に返されます (コールバック メソッド _TabControlPartial および _GridViewPartial でのみデータを返すことに注意してください)。列やフィルターなどを並べ替えると、コールバックが起動され、サーバーからデータが返されます。

あなたが持っているコードは正しいように見えますが、プロセスのどこかでモデルがその価値を失っています。最適なオプションは、タブ コントロール、グリッド バインド、およびコントローラーにブレークポイントを配置し、バインドされたときに期待するデータが所定の位置にあることを確認することです。

次のように、タブがアクティブになったときにコールバックを入れることで「ごまかす」ことができます。

@Html.DevExpress().PageControl(
settings =>
{
    settings.Name = "TabControl";
    settings.ClientSideEvents.Init = "TabControl_Init";
    ...
}).GetHtml()

そしてJavaScriptには次のものがあります:

function TabControl_Init(s, e) {
    GridView.PerformCallback();
}

このように、タブが初期化された後、GridView はコールバックを実行し、データを正しく取得します。しかし、コードをステップ実行して、そもそもデータが送信されない理由を突き止めたほうがよいでしょう。

于 2013-12-27T15:03:20.857 に答える