3

さて、私は恥ずかしいほど単純な質問がありますが、うまくいけば恥ずかしいほど単純な答えがあります。asp:ImageButtonを取得して、コードビハインドの変数を含むアラートメッセージを表示しようとしています。コードの過度に単純化されたバージョンは次のとおりです。

public string AlertMe
{
    get
    {
        return "alert('hi');";
    }
}

この方法でアクセスしようとすると、次のようになります。

<asp:ImageButton ID="btn" runat="server" ImageUrl="/Images/img.ico" OnClientClick='<%=AlertMe%>'/>

ポストバックが表示されますが、プロパティにまったくアクセスできないかのようにアラートメッセージが表示されません。一方、これらの2行:

<%=AlertMe%><br />
<a onclick="<%=AlertMe%>">click this</a>

どちらもうまく機能し、ダンディです。(1つ目はjavascriptアラートのコードを表示し、2つ目は問題なくアラートを発生させます。)

だから私の大きな質問は:なぜaspコントロールのOnClientClickイベントがアラートの登録に失敗するのですか?私が見逃している明らかな欠陥がありますか、それともコードビハインドからイベント全体を登録する必要がありますか?

4

3 に答える 3

4

<%= ... %>この構文を使用してサーバー コントロールの属性を設定することはできません。サーバー コントロールに動的属性を設定するには、コードで設定する必要があります。

this.btn.OnClientClick = this.AlertMe;

<%= ... %>のショートカットだからですResponse.Write()。そのため、aspx が解析、評価され、レンダリングが開始されるまで呼び出されません。それまでには手遅れです。

コード ビハインドで値を設定する代わりに、次の準宣言的手法を使用できます。

<asp:ImageButton ID="btn" runat="server" ImageUrl="/Images/img.ico" />
<%
btn.OnClientClick = <%=AlertMe%>;
%>

それを回避する他の方法があります。 同様の質問に対するこの回答では、実行できるいくつかのアプローチについて説明しています。これについて具体的に言及している「公式」のリファレンス (msdn など) は見つかりませんが、それほど難しくはありませんでした。この問題について議論しているいくつかのブログ記事を次に示します。

または、より楽しく読むために bing でググってください。

于 2012-12-13T00:25:44.393 に答える
1

この問題に遭遇した他の人のために、私はこのブログに出くわしました

Expression Builders と ViewState の問題に関するセクションは、特に有益であることがわかりました。

于 2012-12-13T15:40:14.267 に答える
-1

引用の問題だと思います。試す

OnClientClick="<%=AlertMe%>"
于 2012-12-13T00:27:05.870 に答える