如何使 Anthem Ajax 与 URL 重写协同工作
如何使 Anthem Ajax 与 URL 重写协同工作
引言
Anthem Ajax 是一个优秀的 Ajax 库,它允许你在 ASP.NET 中编写 Ajax 代码而无需编写 JavaScript。但是,尝试将其与无扩展名 URL 重写结合使用却是一个挑战。
你可以从 这里 下载 Anthem Ajax。你可以在 这里 了解更多关于所使用的 URL 重写工具的信息。
所使用的 Form 控件是 这篇文章 的扩展。
背景
在当前的 Web 开发场景中,最受欢迎的两个特性是
- Ajax:无需回发,
UrlReWriting
:提供 SEO 友好、美观的 URL
但是,将两者一起使用一直很困难。
当 URL 的形式为 http://foo.com/id/151 时,Ajax 会失效。为了克服这个问题,我采用了一种策略,为 HTML 表单和 Ajax 框架提供相同 URL 的不同视图。
解决方案
为了将 Anthem Ajax 与流畅的 URL 结合起来,我的策略是为 HTML 表单和 Ajax 框架提供相同 URL 的不同视图。我希望表单的 action 属性具有原始的 RawUrl
作为其值。同时,我希望 Anthem Ajax 框架具有重写的简单 URL 作为其值。
我通过继承 HtmlForm
类创建了一个新的 Form
类。然后,我将原始 URL(未经重写的 URL)写入表单的 name 属性中。在 action 属性中,使用原始 URL(美观的 URL,如地址栏中所示)。
然后,我对 Anthem 下载中的 anthem.js 文件进行了一处修改。我修改了 Anthem_GetCallBackUrl
函数,使其从 form.name
而不是 form.action
返回 URL。
这解决了两个问题
- 表单的
Action
属性将具有原始的美观无扩展名 URL(原始 URL)。
这将有助于在页面回发(例如,按钮点击引起的回发)后保留美观的无扩展名 URL。 - 而 Name 属性将具有重写的真实 URL。
这将提供给 Anthem 框架,使其认为它正在工作而没有进行任何 URL 重写 :-)
Using the Code
要查看实时演示,只需运行附带的示例网站即可。
要在项目中进行 URL 重写
- 只需将 DLL 包含在文件夹中:重写 DLL
- 使用包含在此项目中的 Anthem 库(上述文件夹中的 DLL)。
- 使你的 Web.Config 文件如附带的 Web.Config 文件所示。
- 不要在 .aspx 文件中使用
form
标签,而是使用继承的表单的标签。
历史
- 2008 年 3 月 24 日:初始版本