从子页面在母版页上设置DropDownList选定值

时间:2011-07-06 18:20:46

标签: c# asp.net drop-down-menu master-pages

尝试类似

的内容
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

2 个答案:

答案 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();

这是页面和母版页之间的逻辑。