代码之家  ›  专栏  ›  技术社区  ›  Giuseppe Accaputo

论动态创建控件与否

  •  1
  • Giuseppe Accaputo  · 技术社区  · 14 年前

    我目前正在从事一个ASP.NET 3.5项目,我想知道您对以下情况的看法,有时我会遇到这种情况:

    假设我定义了

    <Window runat="server" ID="windowTest" />
    

    假设在上述情况下 组件框架有可能得到我的 Window 从客户端使用 ID

    function MyFunc(){
        var win = GetWindow("windowTest");
    }
    

    我们还假设这两个代码片段放在不同的文件中,例如MasterPage.Master中的JavaScript代码和AnotherPage.aspx中的控件。

    正如您可能已经注意到的,控件的传递 身份证件 GetWindow 函数在这里有点问题,因为更改控件的 会破坏JavaScript函数。

    这种情况闻起来确实需要好好解决 Replace Magic Number with Symbolic Constant 重构。我可以通过动态创建 窗口 控件的值并使用常量作为控件的 身份证件

    另一页.aspx :

    Window windowTest = new Window();
    windowTest.ID = Consts.ID_WINDOW_TEST;
    form1.Controls.Add(windowTest);
    

    母版页。母版 :

    function MyFunc(){
        var win = GetWindow("<%= My.Namespace.Consts.ID_WINDOW_TEST %>")
    }
    

    我现在的问题是: 遇到这种情况时,是否动态创建所有控件(如上面的示例所示),使用这种方法是否有任何缺点,例如设计器不再显示控件?或者你说 “把它硬编码在你的代码里?或者你有其他方法来解决这个问题吗?

    身份证件

    提前感谢所有的回复。

    问候语,

    更新/澄清 :

    在这个问题的第一个版本中,我犯了一个小错误,即代码片段放在同一个文件中。由于控件和JavaScript方法都位于同一个文件中,因此无需动态创建控件并定义控件的 使用常数;通过直接在 .aspx 我可以用它 身份证件 GetWindow("<%= windowTest.ID %>");

    但是,我的问题是另一个;控件和JavaScript方法分别放在不同的文件中,在这种情况下,使用控件的 已经不行了。因此,我介绍了我的问题中提到的解决方案,以及控件的常量和动态创建。现在我更正了问题中的两个文件名,以便描述与问题相关的正确场景。

    3 回复  |  直到 14 年前
        1
  •  0
  •   Ritik Khatwani    14 年前

    在4.0中,您可以很好地控制在母版/内容页情况下生成的客户机ID。但我相信,如果有人在某个地方手动更改页面中的ID,而不是javascript代码中的ID,这仍然是一个问题。如果您是唯一一个处理这段代码的人,那么您可以一直保持警惕并正确地重构。否则,您可以使用constants选项或将id存储在单独的资源文件中。

        2
  •  0
  •   citronas    14 年前

    在我看来,有两个合适的解决方案:

    1) 使用JQuery框架通过JavaScript获取要寻址的html元素。JQuery被设计成能够使用自动生成的分层创建的控件id
    2) 使用.NETFramework4.0,不要使用控件ID的自动生成(我听说这是4.0中的一个新特性。我认为在你的情况下,这可能值得一试。)

        3
  •  0
  •   G-Mac    14 年前

    A generic way to find ASP.NET ClientIDs with jQuery "... 它似乎有一些好主意可以对你有所帮助。