我正在使用ASP.NET 3.5†编写一个网站,此阶段我的大部分网址都使用PathInfo,如:
http://localhost:<whatever>/Account.aspx/Login
唯一的问题是,当表单发回时,它会尝试使用URL:
http://localhost:<whatever>/Account.aspx/Account.aspx
到目前为止,我已尝试将按钮的PostbackURL
属性设置为~/Account.aspx
,但同样的事情发生了。
我也尝试过发布到单独的DoLogin.aspx
页面,但表单变量不会随之发送。
我真的不想在Session集合中设置用户名和密码。
感谢。
†我会使用MVC,但我无法让它与我的主机一起正常工作。
答案 0 :(得分:3)
这些文章的解决方法可以满足您的需求。
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx http://blogs.iis.net/ruslany/archive/2008/10/23/asp-net-postbacks-and-url-rewriting.aspx
我相信您的问题与影响使用网址重写的任何人的问题相同。虽然这些方法非常不同,但它们都会导致页面位置与系统认为页面位置不匹配。
快速提问 - 您是否有机会使用3.5 SP1? 如果是这样,您可以手动设置表单操作 - 基本上是
的内容<form ID="ImAForm" action="~/Account.aspx" runat="server>
不幸的是,我无法确定这是否是同一个问题。从逻辑上讲,它看起来似乎是同一个问题,但我找不到任何特定于pathInfo的东西,而且我的大多数经验都是使用URL重写。如果您没有SP1,则无法轻松覆盖表单操作,因此接下来要尝试的是第一个博客中引用的方法......
以下是文章的相关内容......
使用URL处理ASP.NET PostBack 重写
人们经常遇到的一个问题 使用ASP.NET和Url-Rewriting时 与处理回发有关 场景。具体来说,当你 放置一个控件 在页面上,ASP.NET将自动执行 默认情况下输出“动作” 标记的属性指向后面 到它所在的页面。问题 当使用URL重写时 控件呈现的URL 不是请求的原始URL (例如:/ products / books),但是 而是重写的(for 例: /products.aspx?category=books)。这个 意味着当你做回发时 服务器,URL将不是你的 干得好。
使用ASP.NET 1.0和1.1,人们常常 求助于分类 控制并创建自己的控件 正确输出动作 使用。虽然这有效,但它最终会成功 有点乱 - 因为它意味着 你必须更新你的所有页面 使用此备用表单控件, 它有时会有问题 使用Visual Studio WYSIWYG 设计师。
好消息是ASP.NET 2.0,有一个更清洁的技巧,你可以用来重写“动作” 控件的属性。 具体来说,你可以利用 新的ASP.NET 2.0控制适配器 可扩展性架构 自定义渲染 控制,并覆盖其“行动” 具有值的属性值 提供。这不需要你 更改.aspx页面中的任何代码。 相反,只需添加.browser文件即可 你的/ app_browsers文件夹 将Control Adapter类注册到 用来输出新的“动作” 属性:
希望有所帮助 - 对不起,我在最初的帖子中并不是很清楚。 如果这不成功,请告诉我......