3

OnClientClick イベントに確認メッセージを返す必要があります。問題は、ストアド プロシージャからメッセージを取得する必要があり、関数を正しく呼び出していないようです。

 <asp:ImageButton 
OnClientClick="return confirm(<%# GetConfirmExportMessage()%>);"            
OnClick="btnExportRed_Click" 
runat="server" 
ImageUrl="~/Images/excel_red.gif" 
ID="btnExportRed" 
AlternateText="Export all records!"/>

私のコードビハインド:

public string GetConfirmExportMessage()
    {
        string xmlFilterForExport = Parameters.ToString().Split('+')[4].Trim();
        string alertMessage = companiesSearcher.GetAlertMessage(xmlFilterForExport, 1, null, null, IdSegment, 1, Convert.ToInt32(RoDB2004.BLL.clsUsers.UserID));

        return alertMessage;
    }
4

3 に答える 3

3

ポンドの代わりに等号を使用してみてください (一重引用符を忘れないでください)。

OnClientClick="return confirm('<%= GetConfirmExportMessage()%>');"

ただし、ImageButton が DataGrid または GridView 内に配置されている場合、サーバー側のコードは評価されず、実際のメッセージではなく <%= GetConfirmExportMessage()%> というアラートが生成されます。

この問題を回避する (およびパフォーマンスやスループットなどを向上させる) には、メッセージを一度変数に出力してから、変数の内容を警告します。

<script language="JavaScript">
    var myMessage = '<%= GetConfirmExportMessage()%>';
</script>

後で、GridView で...

OnClientClick="return confirm(myMessage);"

「myMessage」のような小さな変数名を繰り返すことでスループットを節約し、大きなメッセージを繰り返さないようにします。GetConfirmExportMessageまた、このメソッドは何十回も呼び出されないため、パフォーマンスが向上することに注意してください。

メッセージが現在の行内のデータに固有であり、「よろしいですか?」のように静的ではない場合は、GridView のRowDataBoundイベント内でこの操作を実行することをお勧めします。および現在の行がバインドされているデータに完全にアクセスできるため、ImageButtonサーバー側のセットアップが非常に簡単になります。メソッドを確認するFindControl()か、正確な場所がわかっている場合は、それを参照してオブジェクトをボックスから取り出します。

protected void gvMyGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        ImageButton ibtn = (ImageButton)e.Row.FindControl("btnExportRed");
        if(ibtn != null)
        {
            ibtn.ClientClick = "return confirm('" + GetConfirmExportMessage() + "');";
        }
    }
}

別の解決策として、WebMethods、AJAX、および jQuery を調べる必要があるかもしれません。データはクライアントに送信されず、必要な場合にのみ取得されるため、このソリューションの方がおそらく優れています。

于 2012-08-22T10:12:07.100 に答える
1

あなたはおそらくしたいです

OnClientClick="return confirm('<%= GetConfirmExportMessage()%>');"             

これは、ボタンがクリックされたときではなく、ページがレンダリングされたときに入力されることに注意してください。

btnExportRed.OnClientClick = "javascript:return confirm('" + GetConfirmExportMessage() + "');" 

あなたのコードビハインドで。

于 2012-08-22T10:11:43.927 に答える
1

確認をラップする必要があります'

<asp:ImageButton 
    OnClientClick="return confirm('<%# GetConfirmExportMessage()%>');"            
    OnClick="btnExportRed_Click" 
    runat="server" 
    ImageUrl="~/Images/excel_red.gif" 
    ID="btnExportRed" 
    AlternateText="Export all records!"/>
于 2012-08-22T10:12:11.610 に答える