在我们的网站上,我们进行 URL 重写以生成大量数据库生成的页面。每个页面上都有一个用户登录控件。像这样:

内部aspx页面:/db.aspx?id=123用户可见网址:/ABC/123.aspx、/ABC/456.aspx ...(网址重写)

不幸的是,每个页面上的标记都有一个“DB.aspx?id=123”的操作属性。当用户单击按钮时,浏览器将发布到 /ABC/DB.aspx?id=123 这当然不存在。

我尝试过的解决方案:1.通过子类化 HtmlForm 来更改操作属性。这会破坏网站上的所有其他形式。2.删除 action 属性(以便浏览器始终发布到相同的 url)。这适用于重写的页面,但在“/”(根目录中的default.aspx)上,我收到一条消息,表明“/”上不允许动词帖子(iis 6,我无法控制映射)

有人吗?

有帮助吗?

解决方案

查看来自 scott gu 的这篇非常好的博客文章, http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx.

具体来说,您可以利用新的 ASP.NET 2.0 控件适配器扩展体系结构来自定义控件的呈现,并使用您提供的值覆盖其“action”属性值。这不需要您更改 .aspx 页面中的任何代码”

检查该部分:“Handling ASP.NET PostBacks with URL Rewriting”,我已经使用了他成功发布的适配器。

诗。请注意,在使用 cookieless 会话时使用 url 重写时,asp.net 上会出现一些问题,并且重写的 url 比原始页面更深,就像您所拥有的那样。(/abc/apage 与/D b?)。问题出在框架的源代码中,有解决方法,但这是一个完整的主题(需要权衡:( ...您可能希望它们处于同一级别)。

其他提示

可能是语义,但是action属性=" DB.aspx?id = 123"或“/DB.aspx?id = 123”?假设您的URL重写允许传递到物理页面,这可能是您的问题。

我从来没有这样做过,但是我看到了使用Reflector的代码,我猜你可以这样解决:

在页面上:

this.Form.Action = null;

或:

this.Form.SetAttribute("action", null);

如果这不起作用,只需设置所需的路径:

this.Form.SetAttribute(" action"," ABC / 123.aspx");

如果升级到ASP.NET 3.5 SP1,请动作属性现在正确识别并且可以从代码隐藏设置

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top