0

asp.net gridview を使用して、mdb ファイルのデータのリストを表示しています。5 つの列が表示され、約 240 行のデータがあります。各行には、「名」、「姓」、「タイトル」、「ジャンル」、「号」、および「id」が表示されます。

各「タイトル」エントリには、対応する .aspx ページがあります。グリッドの「タイトル」エントリに対応する実際の .aspx ページは約 180 あります。この関係の例は次のようになります。aspx ページは /alongstory.aspx の場合があります。

達成したいこと: ユーザーがグリッドのタイトル フィールドをクリックして、対応する .aspx ページを開くことができるようにします。

これまでに行ったこと: 「タイトル」フィールドに aspLabel を作成しました - Text='<%#Eval("Title") %>'; ラベル読み込みイベントの C# コードを追加しました。

    aspLabel l = sender as aspLabel;
    l.ClientsideEvents.Click = String.Format("function(s,e) {{window.location = \"{0}"; }}, GetPageUrl(l));

GetPageUrl:

     Private string GetPageUrl(aspLabel l)
     {GridViewDataItemTemplateContainer c = l.NamingContainer as GridViewDataItemTemplateContainer:
    var value = (string)DataBinder.Eval(c.DataItem, "Title"); 
    string result;
    switch (value) {
         case "in the mirror":
            result = "AnotherTitlePage.aspx";
            break;
        case "When your Eyes":
            result = "AnotherTitlePage2.aspx";
            break;
        case "Her Delivery":
            result = "ATitlePage1.aspx";
            break;
        case "You Never Know What You Might See":
            result = "TitlePage3.aspx";
            break;              
        default:
            result = "TitlePageDoesNotHavesameNameAsDBEntry.aspx";
            break;
    }
    return Page.ResolveUrl(result);
}

これは機能しますが、すべてのタイトルを、対応する URL とともに対応する select ステートメントにハード コードする必要があります。これは 240 ケースに相当します。さらに、各行を一意に識別する唯一のフィールドは「id」値です。これは整数です。int のケース選択を設定して適切な URL を返すのに問題がありました (キャスト エラーが問題です)。

私が達成したいこと:グリッド列のフィールド名とケース選択へのURLの両方をハードコーディングせずに、グリッドビューの「タイトル」フィールドをクリックして対応するURLを開く最も効率的な方法を見つけてください。

では、上記の情報を踏まえると、ケース セレクトはこの要件に最適なアプローチでしょうか? より良いアプローチの例や提案をいただければ幸いです。

4

1 に答える 1

0

180 の実際の .aspx ページを作成する代わりに、c# 4.0 以降で導入されたルーティングの概念を使用する必要があります。

ここでは、N 個のページを動的に生成でき、1 ページのみがテンプレートとして機能します。

詳細については、以下のリンクを参照してください

www.jobdoor.in などの asp.net での URL ルーティング

于 2013-05-21T11:42:28.927 に答える