2

一切正常,直到我添加了一个从页面请求中删除 default.aspx 的 url 重写。一旦我添加默认页面上的所有回发都会返回到服务器,但不要触发正确的事件。

该站点是.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,没有用。

也没有像这里推荐的那样添加 Forms ControlAdapter:Postback doesn't work with aspx page as Default Document

预先感谢您的协助!

4

1 回答 1

0

编辑:下面的方法似乎适用于其他一些网站上报道的某些人。然而,它对我不起作用。URL 重写规则总是在 Page_Load 之前启动。:(

您可以通过从中删除“default.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。这会影响您的 URL 的排名。但是,最好在站点级别使用 IIS URL Rewrite 之类的东西来执行此操作,而不是在页面级别(如上面的 String.Replace 代码段)。

于 2013-10-22T20:28:18.737 回答