尝试类似
的内容public string MyText { get {return lbl.Text;} set {lbl.Text = value;}}
取自this question的以异常结束:
public string change_ddlArea { get { return ddlArea.SelectedItem.Text; } set { ddlArea.Items.FindByValue(value).Selected = true; } }
- >对象引用未设置为对象的实例。
使用这些通常会导致相同的错误:
this.ddlEnergyType.Items.FindByValue(resourceTypeVal).Selected = true;
((DropDownList)Master.FindControl("ddlArea")).Items.FindByValue("all").Selected = true;
我很难在谷歌上找到这个问题的答案。它应该工作,如果标签操作有效,那么移动到ddl也是如此?
可能是问题的一个区别是当试图调用它时(在第二个代码块中)我使用
Master.change_ddlArea = sendoff_area;
并且在上述链接中它就像这样完成
((MasterPageTypeName)Page.MasterPage ).MyText = "test";
//so mine would look like this:
((GAWMaster)_default.Master).change_ddlArea = "all";
然而intellisense缺少'.Master' - 将其放入会导致信息出现:非静态字段,方法或属性需要对象引用....
tl,dr:halp
答案 0 :(得分:1)
至少可以说你的问题非常混乱。做你的标题要求很简单:
首先在您的MasterPage
代码后面执行:
public string change_ddlArea
{
get { return ddlArea.SelectedItem.Value; }
set { ddlArea.Items.FindByValue(value).Selected = true; }
}
然后在您的子页面中定义您的MasterPage
类型,以便它可以“看到”change_ddlArea
的{{1}}属性。 See here for more reference info.
MasterPage
然后在您的子页面上的代码中,您应该能够:
<%@ MasterType virtualPath="~/MasterPage.master"%>
您要设置的值必须,否则您将收到对象引用错误。确保正确加载Master.change_ddlArea(someValue);
并且您没有按顺序执行操作。另外,如果您未使用DropDownList
并执行ViewState
,请确保在设置值之前重建了PostBack
。
答案 1 :(得分:1)
.NET中的母版页只是一个类,对吗?让我们以这种方式看一看。您的页面使用该母版页。但这意味着您的页面具有该主页,而 该主页。因此,理论上您应该能够从页面获得对该母版页的引用。让我们用其他的话来说清楚:
// This is like the master page
public class Hand
{
}
// This is like the page. Please notice that a human **has** hands, but a human **is** not hand.
public class Human
{
Hand leftHand = new Handl();
}
现在,想一想。是否有可能通过一个人类的实例?你看到这里的逻辑吗?当然,您可以获得对Hand类的引用,并从那里,您可以获得对finger的引用:
Human jack = new Human();
jack.Hand.Fingers["SmallFinger"].Cut();
现在如果你的手是一种特殊类型的手牌(特殊母版页中有一个标签?)该怎么办?你需要的只是演员
((ExpensiveHand)jack.Hand).Rings.Steal();
这是页面和母版页之间的逻辑。