2012-06-21 46 views
1

我创建像这样我的网页客户端的文本框..Request.Form.FindAllKeys不工作在IE8

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级形式的标签,但心不是说你不会在你的问题说出你输入的文本元素添加到的情况下

+0

类似这样的事情最好通过让name属性像'txtAsName []'来完成,所以服务器端会为你建立一个数据数组。 –

+0

@Kolink我没有关注你的意思 –

+0

''在页面上有多个这样的结果将导致服务器端的数组。 –

回答

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

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> 
0

查看html生成的页面。服务器可能会生成不正确的html标记。即一些html标签没有用close标签正确关闭。