【问题标题】:Can I count on ctl00_PagePlaceHolder_myId staying the same?我可以指望 ctl00_PagePlaceHolder_myId 保持不变吗?
【发布时间】:2010-01-16 18:11:56
【问题描述】:

我需要从 Silverlight 控件将某些内容推送到我的 ASP.NET 网页表单页面中。

我设置了我的文本框的 ID,并且,正如它所希望的那样,ASP.NET “有用地”添加了 ctl...blah_blah 的东西。我可以假设这将始终与它放在我的身份开头的 gumpf 相同吗?

善良,

编辑:感谢大家的回复。

使用我的 Silverlight 控件中的 HtmlPage.Document,我使用了 Doug 的解决方案......

var spec = HtmlPage
            .Document
            .GetElementsByTagName("input")
            .FirstOrDefault(so => ((HtmlElement)so).CssClass == "spec");

【问题讨论】:

    标签: asp.net silverlight


    【解决方案1】:

    不,如果您在它前面添加另一个控件,或者将它嵌套在另一个控件中,它很容易改变。此外,id 因浏览器而异。在某些浏览器中.NET_ 拆分,其他浏览器使用$。我没有使用过 Silverlight,但你能找到某个类的元素吗?你可以为你的元素应用一个类名,而 ASP.NET 根本不会编辑它。

    【讨论】:

    • 谢谢,道格。好主意 RE:cssclass ...我会试一试。
    • 使用您的解决方案编辑问题...再次感谢您和乔尔!!
    【解决方案2】:

    没有。在某些情况下,它可以以不同的方式呈现,并且页面中其他地方的更改可能会更改此控件。处理这个问题的正确方法是引用控件的.ClientID 属性。


    更新

    这就是我通常处理客户端 ID 的方式:

    <head runat="server">
       ...
       <script language="javascript">
       var ControlIDs = {
           SomeControl = <%="'" + SomeControl.ClientID%>',
           OtherControl = <%="'" + OtherControl.ClientID%>'
       };
       </script>
    
       ... other script references here ...
    </head>
    

    我将脚本 first 放在 head 元素中,以便其他脚本文件可以访问它;这样我就不需要通过 asp.net 处理器传递 javascript 文件,我只需要写出每个客户端 ID 一次。无需担心转义任何内容,因为 ' 和 \ 字符永远不会成为呈现的客户端 ID 的一部分。 controlIDs对象的原因是为了避免与其他脚本的命名冲突,而在服务器代码中将“'”连接在前面的原因是asp.net不会看到&lt;%

    再说一遍:这是我通常会做的事情,但对于一些简单的页面来说,这可能是矫枉过正。

    【讨论】:

    • 谢谢,乔尔!在这种情况下,你能给我举个例子吗?
    • 见@Doug 的回答。他很好地涵盖了它。关键是您需要使用 ClientID 属性。
    • 最好的传递方式是什么? &lt;script type="text/javascript"&gt;var myid = "&lt;%= PagePlacehodler.ClientID %&gt;"&lt;/script&gt;类似的东西?
    • 我会将我的常规方法附加到答案中。
    【解决方案3】:

    目前这可能对您没有帮助,但值得注意的是 .NET 4.0 提供了一个新的ClientIDMode property,它将减轻围绕此行为的麻烦。特别是,使用PredictableStatic 设置将产生容易确定的ID。查看上一个链接并向下滚动以查看可预测模式的示例。我还建议阅读ASP.NET Web Server Control Identification

    【讨论】:

      猜你喜欢
      • 2011-01-21
      • 2011-05-18
      • 1970-01-01
      • 2013-06-08
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      相关资源
      最近更新 更多