2

新しいDDプロジェクトを作成し、MVCのもの(参照、ルーティング、使用法など)を追加することで、MVCとDDを組み合わせました。

default.aspx(DDから)のテーブルのリストには、[ScaffoldTable(false)]のテーブルを含むすべてのテーブルが表示されます。Scaffold == trueのテーブルのURLは、予期された形式(DD / TableName / List.aspx)を持っています。ただし、表示されるべきではないテーブルのURLは、/ Home / List?Table=TableNameの形式になっています。

MVCルーティング(Routes.MapRoute)を省略すると、Scaffold(false)のテーブルは表示されません。または、パラメータのデフォルトのみを省略できます。

私の推測では、動的データは、リストページへのルートを作成できるかどうかを確認することで、テーブルが表示されているかどうかを判断します。Scaffold == falseの場合、ルートが生成されないため、DynamicDataRouteは一致しません。ただし、最後にパラメータがデフォルトであるため、MVCルートは一致します。

私は正しいですか、これはバグですか、それともここで何かが完全に欠けていますか?

編集:このようにScaffoldのVisibleTablesのフィルタリングを追加することで修正しましたが、これは回避策です...

System.Collections.IList visibleTables = 
   MvcApplication.DefaultModel.VisibleTables.Where(o=>o.Scaffold==true).ToList();

global.asax.csの私のRegisterRoutes:

    public static void RegisterRoutes(RouteCollection routes)
    {
        DefaultModel.RegisterContext(typeof(studiebase2Entities), new ContextConfiguration() { ScaffoldAllTables = false });

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.Add(new DynamicDataRoute("DD/{table}/{action}.aspx")
        {
            Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
            Model = DefaultModel
        });

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

    }
4

1 に答える 1

2

ややクリーンな修正は、MVCルートに制約を追加して、「テーブル」が指定されたときに一致しないようにすることです。例:次のようなもの

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        new { Table = "" }
    );
于 2010-09-03T07:55:03.303 に答える