2

現在、カスタムの正規表現バリデーターを使用しています(残念ながら)

次のようなサーバー側のインラインスクリプトを使用して正規表現パターンを設定しようとしています:

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

ただし、スクリプトはサーバー側のコードに解決されていません。代わりに、文字どおりに解釈され、レンダリングされたマークアップで次のような結果になります。

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

これが適切に解決されない理由についての手がかりはありますか?

4

8 に答える 8

2

これで、MS がクリアされました。私が発見した問題は、サーバー フォームの "action" 属性が .NET 2 SP2 より前では効果がなかったが、現在は設定できるという事実が原因でした。コード レンダー ブロックが属性値で機能したことはありません。これについては、この投稿の最後で説明します。

これは、Microsoft .NET Framework 3.5 SP1 で導入された意図的な動作変更の結果です。サービス パックより前は、サーバー側の FORM タグのアクションとメソッドの属性をオーバーライドできませんでした。指定すると、ASP.NET によって "POST" と "ページ名" に置き換えられます。

以前は、ASP.NET ページ パーサーはこれらの属性を指定することを妨げませんでしたが、ドキュメントでは action 属性についてそれに対して推奨されていませんでした: http://msdn.microsoft.com/en-us/library/k33801s3.aspx

特にコメント (FORM 要素のコンテキスト内):

• "開始タグに action 属性を含めてはなりません。ASP.NET は、ページの処理時にこれらの属性を動的に設定し、ユーザーが行った設定を上書きします。"

コード ブロックが解釈されないという Josh によって最初に報告された問題は、新しい動作ではなく、既知のバグです。コード レンダー ブロックはサーバー コントロール属性内で使用できません。これは、"接続" バグとして報告されています: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=109257 これには、次の内容が含まれます: " サーバー コントロールの属性は、値としてインライン式を取得できません。 " <link href="<%=RootPath %> ..." ただし、属性の値にはインライン コードを使用できます。"

于 2009-02-19T10:00:37.093 に答える
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 台と動作するマシンが 1 台あるため、これは IIS/.NET 構成の問題であり、おそらく最近の MS Update が原因であるとしか考えられません。この動作を示すマシンに最近インストールしたソフトウェアは次のとおりです。 Visual Studio 2008 WSE 3.0 IE8 RC1

これらのいずれかがこれを引き起こしたのだろうか?

于 2009-01-28T14:36:38.633 に答える
1

devstuff、これが私の3台のマシンで機能するのに、4台目のマシンでは機能しない理由を説明していませんか?それらはすべて同じ.NETFrameworkバージョンと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

データバインドされていないコントロールでデータバインディング式を使用しています。DataBind()を呼び出すか、ExpressionBuilder実装を使用する必要があります。任意のコードにバインドするための単純なExpressionBuilderは、http: //weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspxにあります。

于 2009-01-28T15:03:30.233 に答える
0

正規表現バリデーターにrunat="server"属性がある場合は、コードビハインドから変更します。それははるかに簡単でしょう。

于 2008-10-22T13:02:39.800 に答える
0

Web コントロールの値は、サーバー側のコードをレンダリングしません。むしろコードビハインドからそれを設定します

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

リテラル文字列として取得されています。試してみてください

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

編集:上記は機能しません。成功せずにこれを行う方法を確認しようとしました。通常、分離コードでプロパティを設定し、必要な場合にのみデータバインディングにこの構文を使用します。それができるかどうかも知りたいです。

于 2008-10-22T11:30:29.130 に答える