【问题标题】:Client Callbacks With Master Pages带有母版页的客户端回调
【发布时间】:2010-08-30 05:49:17
【问题描述】:

我正在关注这个例子:http://msdn.microsoft.com/en-us/library/ms178210.aspx

我可以让它只使用一个页面和一个后面的代码,但是当我添加一个母版页时,示例无法正常工作。在我的母版页中,我有一个头部内容部分和一个正文内容部分。没什么花哨的。

如何使用母版页进行客户端回调?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    一种更具可扩展性的方法是使用以下语法(也将 ResultsSpan 替换为 aspx 面板)...

    function LookUpStock()
    {
        var lb = document.getElementById('<%=ListBox1.ClientID%>');
        var product = lb.options[lb.selectedIndex].text;
        CallServer(product, "");
    }
    
    function ReceiveServerData(rValue)
    {   
        document.getElementById('<%=ResultsSpan.ClientID%>').innerHTML = rValue;
    }
    

    这样,如果 MasterPage 的名称(或实际页面)发生更改,代码仍然有效。

    基本上,ASP.NET 进程解析页面并将 指令替换为客户端上控件的正确名称。

    如果您有嵌套控件,此方法也可以使用。在您的示例中,如果您有一个嵌套在另一个面板中的控件,则呈现的 id 可能类似于 MASTERPAGEPREFIX_CONTAINERCONTOLNAME_ListBox1,然后您的解决方法将失败。

    作为一般原则,在您的标记中“硬编码”客户端 ID 通常被认为是一个坏主意 - 让 ASP.NET 进程为您处理它

    【讨论】:

      【解决方案2】:

      我让它工作了。

      请务必修改此代码以说明 MasterPage contentId 前缀:

      function LookUpStock()
      {
          var lb = document.getElementById("MASTERPAGEPREFIX_" + "ListBox1");
          var product = lb.options[lb.selectedIndex].text;
          CallServer(product, "");
      }
      
      function ReceiveServerData(rValue)
      {   
          document.getElementById("MASTERPAGEPREFIX_" + "ResultsSpan").innerHTML = rValue;
      }
      

      【讨论】:

      • 这种技术不是一个好主意。从长远来看,您的代码最终会崩溃。您应该使用@Rich Andrews 提供的解决方案和建议。
      猜你喜欢
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多