首先,我已经广泛研究了 _doPostBack is undefined 错误。我知道 .NET 4.0 和更早版本的 .NET 没有包含识别新浏览器的所有正确定义。我正在运行 .NET 4.5,并且在有关此问题的任何其他问题中似乎都没有解释此错误的性质。
在具有自定义路由的 .NET 4.5 和 IE 11 下,我得到 _doPostback 在带有单个按钮的页面上未定义,没有母版页。但是,当我关闭自定义路由时,我不再收到错误消息。现在奇怪的是,当我重新打开路由时,它将继续工作“一段时间”,然后错误显示回来。我还重新启动了计算机并继续收到错误,直到我关闭路由。
我已经重建了我的解决方案并关闭了所有浏览器。我有一条可能导致问题的路线。但是,当我再次删除自定义路由时,它解决了这个问题。当我重新添加自定义路由时,它会工作一段时间,但后来它会随机失败。
更新,在 Chrome 下运行时,我还看到了奇怪的回发行为。启用“catch all”路由后,客户端验证器似乎无法正常工作,但页面会被发送回服务器然后进行验证。
通用路线在我的路线列表中最后定义,但似乎没有任何区别。它是这样设计的
routes.MapPageRoute("DefaultRoute", "{Company}/{*queryvalues}", "~/default.aspx");
有趣的是,此错误会影响在此路由之前更具体和定义的路由。
更新 我被要求发布路由规则。最后一条规则是导致问题的规则。该网站旨在支持许多客户。我曾认为,在它们能够正常运行之前,我添加了更具体的匹配规则。但是,由于某种原因,catch all 路线仍然会导致问题。最简单的解决方案是将其更改为命名路由,但它并不那么优雅。该网站的先前结构使用虚拟目录作为客户端部分。
RouteValueDictionary dynamicEventDefaults = new RouteValueDictionary();
dynamicEventDefaults.Add("Client", "");
dynamicEventDefaults.Add("EventId", "0");
routes.MapPageRoute("EventRoute", {Client}/Event/{EventId}/{*queryvalues}","~/DynamicEvent.aspx",
false, dynamicEventDefaults);
routes.MapPageRoute("DefaultRoute", "{Client}/{*queryvalues}", "~/default.aspx");