MasterPage访问控制

时间:2014-04-16 15:24:49

标签: c# asp.net

我的网站上有2个母版页。

  1. MainMaster
  2. SubMaster(母版页:MainMaster)
  3. Page(母版页:SubMaster)
  4. 我在SubMasterPage上隐藏了字段。我正在SubMasterPage Init事件中处理数据并设置隐藏字段值。我想从Page.aspx获取hiddenfield的值 我在Page.aspx上尝试这个,得到“对象引用未设置为对象的实例”。错误

     ((HiddenField)this.Master.FindControl("hiddenId")).Value
    

    但是当我有1个母版页时,这段代码正常工作。

    我有解决这个问题的方法吗?或者我应该尝试通过session / querystring e.t.c传输数据。?

1 个答案:

答案 0 :(得分:0)

您可以向子母版页添加属性以返回值,并在子页面中使用它。

例如

Sub Master Page

public string HiddenValue
{
   get
   {
      //return the value of your hidden field
      return HiddenID.Value;
   }
}

子页面:

//Method to get the hidden value from the master page, if the master page is a sub master page
private string GetHiddenValue()
{
   if (this.Master is SubMasterPage)
   {
      string value = (this.Master as SubMasterPage).HiddenValue;
      return value;
   }
   else
   {
      return string.Empty;
   }
}

如果您想更进一步,可以向MasterPage类添加扩展方法,以便从任何页面轻松调用它。

例如:

public static class MasterPageExtensions
{
    public static string GetHiddenFieldValue(this MasterPage master)
    {
        if (master is SubMasterPage)
            return (master as SubMasterPage).HiddenFieldValue;
        else
            return string.Empty;
    }
}

public class SubMasterPage : MasterPage
{
    private HiddenField _hiddenField;

    public string HiddenFieldValue
    {
        get
        {
            return _hiddenField.Value;
        }
    }
}

public class ChildPage : Page
{
    void TestMethod()
    {
        string hiddenValue = this.Master.GetHiddenFieldValue();
    }
}

当您在母版页上有一个模态弹出消息框,并且您想要从任何子页面显示它时,这一点特别有用。