2014-01-24 28 views
-1

我在aspx文件中有这段代码。ASP.NET webforms不同的Id的

<form runat="server"> 

这应该不复杂。但事实证明是这样。 在我的电脑和测试环境将它转换为:

<form id="aspnetForm" ....> 

但生产它变成:

<form id="ctl00" .... > 

非常感谢我的前任很多JS是在“aspnetForm” ID挂钩,这是工作不正常。
那么这个ID代差异从哪里来?

P.S.我知道解决方案只是重写JS查询或将类标签放在表单上,​​然后进行查询。虽然我仍然对这些事情发生的原因感兴趣

+0

D你甚至读过的问题?我问:“为什么** ID可能会在不同的环境下产生不同的结果”。不是为什么

id标签被覆盖,这在我的情况下没有意义,因为没有标签开始。 – lew

+0

是的,我确实已经读过你的问题,你是否阅读过我所链接的和其标题?为每个ASP.NET WebForms页面生成一个''标签。在这种情况下,这个标签得到了一个生成的名字,并且如下所述:_“**当命名容器与当前页面不同时** [...] UniqueID属性返回”aspnetForm“。如果你真的需要,你可以通过从htmlform继承来创建自己的表单,然后重写UniqueID属性或Name属性“_”。 – CodeCaster

+0

另外,当测试环境和生产环境中相同的代码行为不同时,您的测试环境很可能与您的生产配置不匹配。 – CodeCaster

回答

-1

开始编辑

哪个版本的.NET Framework的是在您的PC和测试环境,并且在服务器上使用? - 这将大大影响任何答案的正确性,为什么它会发生 - 特别是如果它们稍有不同。网页上只有一种表单吗?

编辑完

要获得在JavaScript中使用表单名称如下:

<script> 
    theForms = document.getElementsByTagName("form"); 

    for(i=0;i<theForms.length;i++) 
     alert(theForms[i].name); 
</script> 

如果theres只有一种形式,则:

<script> 
    theForms = document.getElementsByTagName("form"); 

    alert(theForms[0].name); 
</script> 
+0

他不问如何做到这一点。他问为什么会发生? –

0

可以使用停止变化ClientIdModeStatic

+1

他不问如何做到这一点。他问为什么会发生? –

+0

这篇文章可能对您有帮助,因为它提供了一个不同的解决方案,以表明OP已经宣布他们知道,即仅限javascript解决方案。请参阅http://stackoverflow.com/questions/how-to-answer –