我需要正确的Global.asax设置才能使我的动态数据站点在ASP.NET MVC项目下运行。路由目前似乎是我的问题。
这是我的global.asax:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
MetaModel model = new MetaModel();
model.RegisterContext(typeof(Models.DBDataContext), new ContextConfiguration() { ScaffoldAllTables = true });
routes.Add(new DynamicDataRoute("DD/{table}/{action}.aspx") {
Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
Model = model
});
routes.MapRoute(
"Assignment",
"Assignment/{action}/{page}",
new { controller = "Assignment", action = "Index", page = "" });
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Admin", action = "Index", id = "" }); // Parameter defaults
}
我尝试使用的链接是:
我收到以下消息:
>'/'应用程序中的服务器错误。该 资源无法找到。描述: HTTP 404.您正在寻找的资源 for(或其中一个依赖项)可以 已被删除,有它的名字 改变了,或者是暂时的 不可用。请查看 关注URL并确保它是 拼写正确。请求的网址: /DD/Work_Phases/ListDetails.aspx
我尝试用DynamicData替换DD,因为应用程序内部的文件夹是DynamicData,并且产生了完全相同的结果。
答案 0 :(得分:3)
网址
http://localhost:64205/DD/Work_Phases/ListDetails.aspx
正在匹配你的第二条(默认)路由,它试图命中一个名为“DD”的控制器。
您可能需要另一个看起来像这样的路线:
routes.MapRoute(
"DD",
"DD/{action}/{page}",
new { controller = "NameOfController", action = "Index", page = "" }
);
...虽然我无法想象为什么你需要传递一个页面参数。命中的页面视图取决于控制器方法的返回操作。
为了更好地了解动态数据与ASP.NET MVC的集成,请查看Scott Hanselman's Plugin-Hybrids article.他有一些关于处理不属于MVC的.ASPX文件的详细信息。特别是,如果您有一个不希望由ASP.NET MVC控制器处理的.ASPX,则可以安装忽略路由:
routes.IgnoreRoute("{myWebForms}.aspx/{*pathInfo}");
应该注意的是,ASP.NET MVC是开箱即用的,可以忽略对磁盘上物理存在的文件的URL请求,尽管Scott的IgnoreRoute技术显然更有效。
答案 1 :(得分:3)
网址与您的动态数据路由不匹配,因为它不符合您对其施加的约束。您正在请求操作ListDetails
,但只允许这些操作
Constraints = new RouteValueDictionary(
new { action = "List|Details|Edit|Insert" }
编辑:您确定存在名为ListDetails
的操作吗?然后将上面的约束修改为
Constraints = new RouteValueDictionary(
new { action = "ListDetails|List|Details|Edit|Insert" }
为了确保导致路由被忽略的约束,您可以尝试其中一个默认操作吗?例如。
答案 2 :(得分:0)
要使ASP.NET MVC正常工作,您必须将您尝试访问的URL与路由列表进行匹配。
对于您当前的global.asax,有效网址的示例为:
http://domain/AnyController/AnyAction/AnyParameter
http://domain/Assignment/
http://domain/Assignment/AnyAction/AnyParameter
MVC请求被重定向到正确的Controller类,Action方法,传入参数.MVC请求不重定向到任何ASPX类。这是ASP.NET MVC和vanilla ASP.NET Page之间的区别。