代码之家  ›  专栏  ›  技术社区  ›  Andy_Vulhop

从WebMethod调用母版页上的方法

  •  2
  • Andy_Vulhop  · 技术社区  · 16 年前

    或者任何可行的解决方法。

    IFooMaster ShowFancyMessagePopupTheBusinessCantLiveWithout(string message);

    我所在的页面继承了此母版页。当一个复选框被取消选中时,我想向用户显示一条消息,如果他们保存它,没有一些管理操作,他们就不能重新选中复选框。

    alert('message'); 因为他们希望这些消息的外观保持一致。

    接下来,我尝试通过PageMethods调用ajax(因为这个代码库中的其他所有东西都使用这种方法)来显示消息。我的问题在于这个方法是静态的。

    [WebMethod]
    public static void ShowSuperImportantMessage()
    {
         if(!checkboxICareAbout.Checked)
             ((IFooMaster)Master).ShowFancyMessagePopupTheBusinessCantLiveWithout("If you uncheck that thing, you can't recheck it.");
    }
    

    ShowSuperImportantMessage() static ,我无法访问 Master

    public void ShowFancyMessagePopupTheBusinessCantLiveWithout(string message)
    {
        lblGenericMessage.Text = message;
        btnGenericMessageOK.Focus();
        upGenericMessage.Update();
        mpeGenericMessage.Show();
    }
    

    mpeGenericMessage 是aj吗axtoolkit:ModalPopupExtender.

    upGenericMessage 是一个更新面板。

    另外两个很明显。

    我知道情况不太理想,但我知道这是继承的代码,我不能放弃它,重写他们的网页堆栈的一半。

    3 回复  |  直到 16 年前
        1
  •  1
  •   John Saunders    16 年前

    ((IFooMaster) ((Page)HttpContext.Current.Handler).Master)
    

    看来这不管用- Master

    因此,应该使用相同的母版页创建一个空页。让该页面接受POST或GET,并使用您需要传递给母版页方法的任何参数。让页面加载提取参数并调用方法。然后应该使用 Response.Write 返回结果(并记住更改内容类型)。让您的客户端代码调用页面并得到结果。

        2
  •  0
  •   µBio    16 年前

    在ClientID之前你有没有尝试过类似window.top的东西?

    你不需要硬编码ClientID。既然你的js在页面中,那么试着按照以下几行来做。。。。

    window.top.document.getElementById( "<%= yourelement.ClientID %>" ).Whatever();
    
        3
  •  0
  •   Andy_Vulhop    16 年前

    很抱歉花了这么长时间才回复。

    请注意,我对此并不感到自豪,但最终的解决方案是将客户机id硬编码到jQuery中,jQuery在母版页上打开模式对话框。

    就像我说的,我不为这个肮脏的,肮脏的修补感到骄傲。不过,令人欣慰的是,由于它位于母版页上,因此上面实际上没有任何命名容器。因此,随着客户身份的改变,它不太可能遇到问题。