目前我正在使用自定义正则表达式验证器(不幸的是)。
我正在尝试使用服务器端内联脚本设置正则表达式模式,如下所示:
ValidationExpression="<%= RegExStrings.SomePattern %>"
但是,脚本无法解析为服务器端代码。相反,它是按字面解释的,我最终在渲染的标记中得到类似的东西:
ctl00_DefaultContent_regexValidatorInvitation.validationexpression = "<%= RegExStrings.SomePattern %>";
有关为何没有正确解决的任何线索?
答案 0 :(得分:2)
但为什么会这样呢?我可以使用简单的aspx页面重现您的问题,如下所示:
<%@ Page language="c#" AutoEventWireup="true" %>
<html>
<body >
<form id="Form1" method="post" runat="server" action="?<%=Request.QueryString%>">
Query String value: <%=Request.QueryString %>
<br />
<input type=submit />
</form>
</body>
</html>
提交表单后显示以下内容:
查询字符串值: %3C%25 =的Request.QueryString%25%3E
由于某种原因,内联代码在执行时不会执行 runat =“server”存在。奇怪的是我有3台机器 这样做并没有这样做,所以我只能假设 这是一个IIS / .NET配置问题,可能是由最近的MS引起的 更新。我最近在机器上安装的软件 表现出这种行为是: Visual Studio 2008 WSE 3.0 IE8 RC1
我想知道这些是否导致了这一点?
答案 1 :(得分:2)
这已经被我的MS清理了。我发现的问题是由于服务器表单中的“action”属性在.NET 2 SP2之前没有任何影响,但现在可以设置。代码渲染块从未在属性值中起作用 - 这将在本文结尾处解释。
这是Microsoft .NET Framework 3.5 SP1中引入的行为故意更改的结果。在Service Pack之前,服务器端FORM标记上的action和method属性无法覆盖。如果指定,它们将被“POST”和“页面名称”替换为ASP.NET。
以前,ASP.NET页面解析器并没有阻止指定这些属性,尽管文档建议不要使用action属性: http://msdn.microsoft.com/en-us/library/k33801s3.aspx
特别是评论(在FORM元素的上下文中):
•“开始标记不得包含操作属性.ASP.NET在处理页面时动态设置这些属性,覆盖您可能进行的任何设置。”
最初由Josh报告的问题,其中代码块未被解释不是新行为,而是已知错误 - 代码呈现块不能在服务器控件属性中使用。这被报告为“连接”错误: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=109257 其中包含以下内容: “服务器控件的属性不能将内联表达式作为值。这解释了出现的意外行为:”&lt; link href =“&lt;%= RootPath%&gt; ...”但是,内联代码可用于值属性。“
答案 2 :(得分:1)
devstuff,这并不能解释为什么这对我的3台机器起作用,而不是第4台,是吗?他们都使用相同的.NET Framework版本和IIS设置(我相信,已经检查了多少我coukd)
答案 3 :(得分:1)
我在调查这个时已经卸载了.NET框架(3.5然后是3.0和2.0) - 之后我没有遇到任何问题 安装以下各项: .net framework 2.0 .net framework 2.0 SP1 .net framework 3.0 .net framework 3.0 SP1 .net framework 3.5
但是在我安装了.net framework 3.5 SP1后,行为又回来了 - 我想这就是问题所在。我已经向微软提出这个问题,并在收到回复时更新这个帖子。
答案 4 :(得分:0)
Web控件中的值不呈现服务器端代码。 而是从Code Behind
中设置RegExValidator1.ValidationExpression = RegExStrings.SomePattern;
答案 5 :(得分:0)
它被视为文字字符串,请尝试
ValidationExpression ='&lt;%= RegExStrings.SomePattern%&gt;'
编辑:以上不起作用,我试图看看如何做到这一点没有成功,我通常在代码隐藏中设置属性,只在必要时才使用这种语法进行数据绑定。我有兴趣知道是否可以这样做。
答案 6 :(得分:0)
如果正则表达式验证程序具有runat =“server”属性,则从后面的代码中更改它。这会容易得多。
答案 7 :(得分:0)
您在不是数据绑定的控件上使用数据绑定表达式。您需要调用DataBind(),或使用ExpressionBuilder实现。可以在http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx
找到用于绑定到仲裁代码的简单ExpressionBuilder