运行良好,直到我添加了一个 url 重写,从页面请求中删除默认值.aspx。一旦我添加了默认页面上的所有回发都会返回到服务器,但不触发正确的事件。
该站点是 .net 2.0(已安装 .net 4.0,但此站点未使用它)IIS 服务器的版本为 7.5
网址重写规则:
<rule name="Default Document URL Rewrite" stopProcessing="true">
<match url="(.*?)/?Default.aspx$" />
<action type="Redirect" url="{R:1}" />
</rule>
示例标记代码:
<form id="form1" runat="server">
<asp:Button runat="server" ID="btnPostBack" Text="Post Back"
OnClick="btnPostBack_Click" />
<asp:Label runat="server" ID="lblDone" />
</form>
示例代码隐藏:
protected void btnPostBack_Click(object sender, EventArgs e)
{
lblDone.Text = "Postback worked!";
}
注意:表单的 action 属性未呈现为空白,因此在page_load中添加一行代码以使用 Request.RawUrl 显式填充它,如此处建议的那样:http://ruslany.net/2008/10/aspnet-postbacks-and-url-rewriting,不起作用。
添加窗体控件适配器也没有像这里建议的那样:回发不适用于 aspx 页作为默认文档。
提前感谢您的帮助!
编辑:下面的方法似乎适用于其他一些网站上报道的某些人。然而,这对我不起作用。URL 重写规则始终在Page_Load之前启动。:(
您可以通过从表单操作中删除"默认.aspx"来修改其 URL。
此代码片段使用正则表达式忽略大小写:
using System.Text.RegularExpressions;
protected void Page_Load(object sender, EventArgs e)
{
Form.Action = Regex.Replace(Request.RawUrl.ToString(), "(.*)[dD]efault.aspx(.*)", "", RegexOptions.IgnoreCase);
}
下面的代码片段允许您通过将所有内容设置为小写来忽略大小写。
protected void Page_Load(object sender, EventArgs e)
{
Form.Action = Request.RawUrl.ToLower().Replace("default.aspx", "");
}
我以沙欣·博伊达斯(Sahin Boydas)对 http://ruslany.net/2008/10/aspnet-postbacks-and-url-rewriting/的评论为基础
对于SEO来说,将所有URL小写或大写是件好事,因为搜索引擎将不同情况下的URL计为单独的URL。这会影响您的网址的排名。但是,最好在站点级别使用 IIS URL 重写之类的内容执行此操作,而不是在页面级别(如上面的 String.Replace 代码段)执行此操作。