2

目前我正在使用自定义正则表达式验证器(不幸的是)

我正在尝试使用这样的服务器端内联脚本设置正则表达式模式:

ValidationExpression="<%= RegExStrings.SomePattern %>"

但是,该脚本并未解析为服务器端代码。相反,它是按字面意思解释的,我最终在渲染的标记中得到了类似的东西:

ctl00_DefaultContent_regexValidatorInvitation.validationexpression = "<%= RegExStrings.SomePattern %>";

关于为什么这不能正确解决的任何线索?

4

8 回答 8

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

我想知道这些是否导致了这种情况?

于 2009-01-28T14:36:38.633 回答
2

这现在已经清除了我的MS。我发现的问题是由于服务器表单中的“action”属性在 .NET 2 SP2 之前没有效果,但现在可以设置。代码渲染块从来没有在属性值中工作过——这在本文末尾进行了解释。

这是 Microsoft .NET Framework 3.5 SP1 中引入的故意更改行为的结果。在服务包之前,不能覆盖服务器端 FORM 标记上的操作和方法属性。如果指定,它们将被 ASP.NET 替换为“POST”和“页面名称”。

以前,ASP.NET 页面解析器并没有阻止指定这些属性,尽管文档建议不要将其用于操作属性:http: //msdn.microsoft.com/en-us/library/k33801s3.aspx

特别是注释(在 FORM 元素的上下文中):

• “开始标记不得包含操作属性。ASP.NET 在处理页面时动态设置这些属性,覆盖您可能进行的任何设置。”

最初由 Josh 报告的问题,其中代码块没有被解释不是新行为,而是一个已知的错误 - 代码渲染块不能在服务器控制属性中使用。这被报告为“连接”错误: http ://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=109257 其中包含以下内容:“服务器控件的属性不能将内联表达式作为值。这解释了如下所示的意外行为:“ <link href="<%=RootPath %> ..." 但是,内联代码可用于属性值。”

于 2009-02-19T10:00:37.093 回答
1

devstuff,这并不能解释为什么这可以在我的 3 台机器上运行,但不能在第 4 台机器上运行,是吗?他们都使用相同的 .NET Framework 版本和 IIS 设置(我相信,我已经检查了尽可能多的)

于 2009-01-28T15:24:54.247 回答
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 。网络框架 3.5

但是在我安装了 .net framework 3.5 SP1 之后,行为又返回了——我想这就是问题所在。我已向 Microsoft 提出此问题,并会在收到回复时更新此线程。

于 2009-01-29T12:23:59.567 回答
0

Web 控件中的值不会呈现服务器端代码。而是从后面的代码中设置

RegExValidator1.ValidationExpression = RegExStrings.SomePattern;
于 2008-10-22T11:28:06.997 回答
0

它被视为文字字符串,请尝试

ValidationExpression='<%= RegExStrings.SomePattern %>'

编辑:以上不起作用,我试图看看如何做到这一点但没有成功,我通常在代码隐藏中设置属性,并且只在必须时使用这种语法进行数据绑定。我很想知道它是否也可以完成。

于 2008-10-22T11:30:29.130 回答
0

如果您的正则表达式验证器具有 runat="server" 属性,则从后面的代码中更改它。这会容易得多。

于 2008-10-22T13:02:39.800 回答
0

您在未绑定数据的控件上使用数据绑定表达式。您需要调用 DataBind(),或使用 ExpressionBuilder 实现。可以在http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx找到一个用于绑定到任意代码的简单 ExpressionBuilder

于 2009-01-28T15:03:30.233 回答