2

画像ボタンを次のように宣言しています。

<div>
    <asp:ImageButton ID="btnDoWork" runat="server" ImageUrl="/_LAYOUTS/1033/IMAGES/row.png" ValidationGroup="Page" />
</div>
<div>
    <asp:RequiredFieldValidator runat="server" ID="reqName" ControlToValidate="txtEmail" ValidationGroup="Page" ErrorMessage="enter a email" />
    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ValidationExpression="^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$" ControlToValidate="txtEmail" ValidationGroup="Page" ErrorMessage="enter a email" />
</div>

更新パネル内で、

今コードビハインドで私はこのようなことをしています、

btnDoWork = (ImageButton)this.control.FindControl("btnDoWork"); //this code is in childcontrols method
btnDoWork.Click += new ImageClickEventHandler(btnDoWork_Click);

それから

protected void btnDoWork_Click(object sender, ImageClickEventArgs e)
        {

//Process a bit of code and at end,

this.Page.Unload += new EventHandler(Page_Unload_MessageBox);

次に、ボタンクリックイベントで、

public static void Page_Unload_Page_Unload_MessageBox(object sender, EventArgs e)
        {
            System.Globalization.CultureInfo _culture = Thread.CurrentThread.CurrentUICulture;
            StringBuilder sb = new StringBuilder();
            sb.Append("<script language=\"javascript\">");
            sb.Append("$('body').append(\"<div id='M'><span id='text'>" +
               SPUtility.GetLocalizedString("$Resources:abc", "def", (uint)_culture.LCID) +
               "</span><br/><div id='BB' onclick='return BB();'><a href='' onclick='return BB();'>" +
               SPUtility.GetLocalizedString("$Resources:OK", "def", (uint)_culture.LCID) +
               "</a></div></div>\");");
            sb.Append("function BB() { $('#M').remove(); $('#E').remove(); return false; }");
            sb.Append("function dM(){   var browser = navigator.appName; if (browser == 'Netscape') { $('#M').css({ 'top': '5%' }, 500);    } }");
            sb.Append("</script>");

            // Write the JavaScript to the end of the response stream.
            HttpContext.Current.Response.Write(sb.ToString());

今、私が考えようとしているときにエラーが発生する電子メールアドレスを入力するResponse.Writeと、どのような代替手段があるのだろうかと思います。たとえば、更新パネルやその他のイベントなどでトリガーを使用できますか。

これが私が今得ているエラーです、

ChromeとIEで

注:すべての変数名を変更したので、何かが一致しなくても混乱しないでください

4

2 に答える 2

0

メッセージは非常に明確で、更新パネルにこのコマンドHttpContext.Current.Response.Writeを追加することはできません。また、更新パネルは、ページの一部を再描画するためにjavascriptによって使用される構造体を返すため、その処理方法がわからないためです。

解決策は、UpdatePanel内の追加のhtmlコードを追加する場所にリテラルコントロールを追加し、そのコントロールを次のようにレンダリングすることです。

txtLiteralID.Text = sb.ToString();

ただし、ここでは通常とは異なる状況があり、スクリプトをレンダリングして実行することになります。

主な問題は、スクリプトをトリガーして実行する方法です。唯一の方法は、この標準コードであるUpdatePanelハンドラーを使用することです。

<script type="text/javascript"> 
   // if you use jQuery, you can load them when dom is read.
   $(document).ready(function () {
       var prm = Sys.WebForms.PageRequestManager.getInstance();    
       prm.add_initializeRequest(InitializeRequest);
       prm.add_endRequest(EndRequest);

    });        

    function InitializeRequest(sender, args) {
    }

    function EndRequest(sender, args) {
       // after update occur on UpdatePanel run the code.
       UnloadMsgBox();
    }
</script>

次にEndRequest、スクリプトを呼び出す必要があります。スクリプトはすべて、コード内に次のように存在します。

function UnloadMsgBox()
{
    // render your code of the javascript.
    $('body').append(\"<div id='M'><span id='text'></span><br/><div id='BB' onclick='return BB();'><a href='' onclick='return BB();'></a></div></div>\");

    function BB() { $('#M').remove(); $('#E').remove(); return false; }"
    function dM(){   var browser = navigator.appName; if (browser == 'Netscape') { $('#M').css({ 'top': '5%' }, 500);    } }"
}

UpdatePanelでレンダリングする必要はありません。

要約する:

  • Response.Write更新パネルでは、を使用して、彼の内部でレンダリングするリテラルコントロール以外のものをレンダリングすることはできません。
  • 更新パネルでは、JavaScriptコードをレンダリングして実行することはできません。JavaScriptコードを実行するには、UpdatePanelに付属のEndRequestハンドラーを使用する必要があります。
于 2012-11-23T16:08:04.717 に答える
0

MS Ajax呼び出しは、フルページレンダリングを実行し、元の差分を計算し、差分をクライアントに送信し、ブラウザーで差分を魔法のようにマージします。

応答としてjavascriptを送信するだけの場合、それはフレームワークが予期しないものであり、メッセージをスローします。

UpdatePanelからjavascriptを呼び出す方法については、以前の回答を参照してください。

于 2012-11-23T16:09:54.620 に答える