0

これが必要なすべてのコードです。

関数内で、テキストボックスラジオボタンリストなどのコントロールを作成します。コントロールが作成されたら、それをパネルに配置してから、次の操作を行います。

        StringBuilder sb = new StringBuilder();
        StringWriter sw = new StringWriter(sb);
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        panel.RenderControl(hw);
        Session["formHTML"] = sb.ToString();
        Label1.Text = sb.ToString();

Label1 のテキストは完璧に出てきます。これは、panel.RenderControl(hw) 行から取得したパネルの html です。これが私の問題です。私が持っているボタンのクリックで:

    Response.Redirect("~/preview.aspx");

これが私の preview.aspx ページのコードです。

<script type="text/javascript">

    function preview() {
        var html =  '<%= Session["formHTML"]%>';
        alert(html);
        $('#previewForm').empty();
        $('#previewForm').append(html);
    }
</script>

<body onload="preview()">
   <form id="form1" runat="server">
      <div id="previewForm">
      </div>
   </form>
</body>

私の問題は、セッション変数が関数に渡されることです。私の機能ではアラートを実行しません。今、私は別のセッション変数を持っていますSession["formID"]. Session[FormID]の代わりに JavaScript 関数に を入れると、Session["formHTML"]完全に機能します。ID が 434 の場合、それは私が示した div タグに追加されます。formHTML は文字列として HTML を持つようになりました。何らかの理由でこれが好きではありません。次のエラーが表示されます。

SyntaxError: Unexpected token ILLEGAL Uncaught

ReferenceError: プレビューが定義されていません

これを理解できません。なぜ機能しないのかわかりません。私が試した私のjavascript関数の中で:

        var html =  '<%= Session["formHTML"].ToString()%>';

        var html =  "'" + '<%= Session["formHTML"]%>' + "'";

HTMLがjavascriptで文字列として適切にレンダリングされていないことがわかったので、これらを試しただけです。このエラーが発生する理由がはっきりとわかりません。そのため、修正方法についてのアイデアがありません。

コメント:

さて、私の関数が次のようになると: var html = '<% Session["formHTML"] %> としてレンダリングされます:

        function preview() {
            var html =  '<div id="panel0" class="panelHeader" class="box ui-draggable" data-ui-widget="draggable">
    <span id="mylabel">mylabel</span><span id="lbl0" onclick="deleteControl(panel0)" style="color:Red;">x</span>
</div>';
            alert(html);
            $('#previewForm').empty();
            $('#previewForm').append(html);
        }

私には正しいように見えますが、それでもエラーが発生します

4

1 に答える 1

1

また、HTML にエスケープされていない不正な文字が含まれているため、文字列値が失われている可能性もあります。'"/\

そう....

ハンドオフでそれらをエスケープしてエスケープ解除するようにします。それにもベストプラクティスがあります。ラベルの値に設定するとASP.netが出力をバッファリングしていると想定していますが、JSに直接設定すると競合が発生します。

また、

            Page.ClientScript.RegisterStartupScript(this.GetType(), "set_campaign", "$(document).ready(function(){  setCampaignID(" + Request.QueryString["campaign_id"] + ");});", true);

<% tags %> の代わりにスクリプトをページに挿入します。タグは正常に機能しますが、不適切に使用すると、未設定の値や経験の浅いプログラマーに問題が発生する可能性があります。あなたが今直面している課題のように。

asp:literal を置き換えることもできますが、私はスタートアップ スクリプトの方が好きで、あなたのニーズを反映していると思います

乾杯!

于 2013-04-16T19:06:58.310 に答える