Magic Ajax Patch,用于 Textbox 和 scriptPath 参数中的 & 和 < 特殊字符
如何修复 Magic Ajax Framework 中的一些错误
引言
在使用Magicajax 0.3时,我发现了它错误地将 & 替换为 &(将 < 替换为 <)。 并且在尝试解决此问题时,文档中一个小小的拼写错误(大小写错误)给我带来了很大的困扰。
背景
Magic Ajax是一个免费的Ajax框架,适用于.NET 1.1和2.0(它也可以在Visual Studio Express 2008中运行)SourceForge。在我看来,它的突出特点是支持 .NET 1.1,并且它是一种非常容易使用的方式。 我不知道还有其他的Magicajax论坛,所以我就在这里发布了这个发现。 这里在CodeProject上也有其他一些文章。 如果你下载了它,请查看docs文件夹,因为框架中的几乎所有内容都在那里进行了说明(它既是参考资料,也是教程)。
&/< 替换 Bug
看一下这个最简单的Ajax表单(你必须下载并启用magicajax才能运行它)
<%@ Page Language="VB" %>
<%@ Register TagPrefix="ajax" Namespace="MagicAjax.UI.Controls" Assembly="MagicAjax" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<script runat="server">
Protected Sub TextBox1_TextChanged_
(ByVal sender As Object, ByVal e As System.EventArgs)
Label1.Text = TextBox1.Text
End Sub
</script>
<html>
<body>
<form id="form1" runat="server">
<ajax:AjaxPanel ID="AjaxPanel1" runat="server">
<asp:TextBox ID="TextBox1" runat="server"
AutoPostBack="true" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>
<asp:Label ID="Label1" runat="server" ></asp:Label>
</ajax:AjaxPanel>
</form>
</body>
</html>
更改Textbox1
后,会执行一个Ajax请求来更新Label1
。 只要你不在Textbox
中输入& 或 < 字符,它就可以正常工作。这些字符会在Textbox
中被替换为& 和 <。
你可能不会在你的应用程序中遇到这个bug,因为Magic Ajax至少有两种不同的方法来更改DOM - 在Ajax请求之后更改元素。
如果启用跟踪(将web.config magicAjax部分中的tracing属性设置为true),你会看到文档的不同部分由不同的JS函数更改。
...
AJAXCbo.SetField("TextBox1","&");
AJAXCbo.ExtendedSetHtmlOfElement("<span id=\"Label1\">&</span>","Label1$ajaxdest");
...
AJAXCbo是处理Ajax处理的本地部分的本地JS对象。你可以在下载包的\Core\script\AjaxCallObject.js中找到它,但它也被编译在MagicAjax.dll中,并将作为动态webresource包含在ASP.NET页面中。
只要你不想更改它,这就很酷,在这种情况下,你可以更改源代码,或者更简单地使用web.config中的scriptpath参数来指向你选择的位置。
但scriptPath的文档中存在错误。 在文档中,它被称为ScriptPath(大小写错误),这不起作用,但不会引发错误,因为它只是被忽略了。
这是我的web.config部分
<magicAjax
scriptPath="/myproject/myscript"
outputCompareMode="HashCode"
tracing="false">
<pageStore
mode="NoStore"
/>
</magicAjax>
Bugfix
在以下函数中
AjaxCallObject.prototype.SetField = function(fieldName, fieldValue)
我替换
field.value = fieldValue;
简单的替换函数
if( fieldValue){
var testValue = fieldValue;
while( testValue.indexOf("&") >= 0 ){
testValue = testValue.replace("&","&");
}
testValue = testValue.replace("<", "<");
field.value = testValue;
}else{
field.value = fieldValue;
}
(while
循环仅用于处理 & 之类的情况。)
警告
此补丁程序假定你没有使用HTML实体 & 和 < 作为你的输入项的值,这些值不能被 & 和 < 替换。
Magicajax 社区
我不知道网上是否还有活跃的magic ajax社区。如果你知道一个社区,或者你自己使用它,请留下评论。
历史
- 2009年9月25日:初始帖子