1

私は自分のページのクライアント側でテキストボックスを作成しています..

  var _text = document.createElement("input");

        _text.setAttribute("type", "text");

        _text.setAttribute("id", "txtAsName" + num);

        _text.setAttribute("name", "txtAsName" + num);

サーバー側のコードでは、フォーム上の任意のテキスト ボックスの ID を取得します (txtAsName1、txtAsName2、txtAsName3 を追加してから、すべてのクライアント側で txtAsName2 を削除することができるため、ポストバック中にフォームの左側にあるテキスト ボックスを取得することが重要です)。

これを使用して、サーバー側の残りのテキストボックスのIDを取得しています:

 string[] allFormKeys = Request.Form.AllKeys;

                    foreach (string key in allFormKeys)
                    {

                     Response.Write("Key Name: " +key + "<br/>");

                        if (key.StartsWith("txtAsName"))
                        {
                            txtBoxes.Add(key);
                        }
                    }

Firefox では問題なく動作しますが、IE8 では Request.Form.AllKeys はテキストボックスを返しません! これは Response.Write で確認でき、Firefox ではテキスト ボックスを取得します。

HTMLに2つのフォームタグがあるかどうかを確認しましたが、そうではありません

4

3 に答える 3

1

新しく作成した要素をフォームに追加するのを忘れている可能性はありますか?

<script>
var input1 = document.createElement("input");
input1.setAttribute("type", "text");
input1.setAttribute("name", "testing123");
input1.setAttribute("value", "i like cake");
document.getElementById("formid").appendChild(input1);
</script>
于 2012-07-03T19:24:31.390 に答える
0

生成されたページ html を調べます。サーバーから不適切な html マークアップが生成された可能性があります。つまり、一部の html タグが close タグで適切に閉じられていません。

于 2012-07-04T07:08:15.670 に答える
0

質問では、テキスト入力要素を何に追加するかを言いません。私はあなたのコードを使用し、フォーム要素内のどこかにテキスト入力フィールドを子として追加していることを確認しました。それらがサーバーにポストバックされるのを確実に見ています:

<div id="testDiv"></div>
<br />
<asp:Label ID="Label1" runat="server" />
<asp:Button runat="server" />
<script type="text/javascript">
    var num = 0;
    var _text = document.createElement("input"); _text.setAttribute("type", "text"); _text.setAttribute("id", "txtAsName" + num); _text.setAttribute("name", "txtAsName" + num);
    testDiv.appendChild(_text);
    num++;
    _text = document.createElement("input"); _text.setAttribute("type", "text"); _text.setAttribute("id", "txtAsName" + num); _text.setAttribute("name", "txtAsName" + num);
    testDiv.appendChild(_text);
    num++;
    _text = document.createElement("input"); _text.setAttribute("type", "text"); _text.setAttribute("id", "txtAsName" + num); _text.setAttribute("name", "txtAsName" + num);
    testDiv.appendChild(_text);
</script>

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Form.AllKeys.Length > 0)
        {
            string keys = string.Join(", ", Request.Form.AllKeys);
            Label1.Text = string.Format("Found {0} keys: {1}", Request.Form.AllKeys.Length, keys);
        }
        else
        {
            Label1.Text = "Form.AllKeys.Length == 0";
        }
    }

これを実行してボタンをクリックすると、ラベルに次のように表示されます。

Found 6 keys: __VIEWSTATE, __EVENTVALIDATION, txtAsName0, txtAsName1, txtAsName2, ctl00$MainContent$ctl00

私はIE8を使用しています。

于 2012-06-21T21:23:04.590 に答える