【问题标题】:System.NullReferenceException - Calling secondary pageSystem.NullReferenceException - 调用辅助页面
【发布时间】:2011-04-06 20:41:28
【问题描述】:

我的组件(ascx):

这个组件是我页面的一部分,和他一起,我打开一个新页面(下一个代码)。

    public void LoadSeller(string name, string id)
    {
        this.txtSeller.Text = name;
        this.hdnSellerID.Value = id;
    }

我的弹出窗口(aspx):

使用此代码,我进行了一些搜索并在 GridView 上选择了一项,将其发送回我的 ascx。

    protected void btnSave_Click(object sender, EventArgs e)
    {
        Components.BasicData basicData= new Components.BasicData();

        Button save = (Button)sender;
        basicData.LoadSeller("TEST", save.CommandArgument);
    }

回发有效,我收到了正确的数据(我检查了我的调试)。但是 txt 和 hidden 都是空的(就像它们没有加载一样),它们在没有我的弹出窗口的情况下工作,但我需要我的弹出窗口。

有什么想法吗?

PS:我的 viewState 是 UP。

我调试了我的整个代码,它停在了

this.txtSeller.Text = name;

LoadSeller 的第一行。这表示“this.txtSeller”为空,我不知道为什么。我检查了我的 .designer.cs 并声明了 this.txtSeller。 (如果我不尝试从其他页面加载,它也可以工作)

Obs:我想知道我的代码是否会以某种方式破坏我其他页面上的负载(或类似的东西)。

感谢您的帮助^.^

编辑:

我的结构是这样的:

页面

Control1

Control2

    **Open pop up**

Control3

弹出窗口

Search

Gridview with buttons

gridview 中的按钮

Goes to my second code "my pop up (aspx):"

Close pop up

在我的 Control2 中,我有我的第一个代码“我的组件(ascx):”

字幕:Control == userControl

面包屑导航:

  • 解决方案
    • 组件(文件夹)
      • BasicData.ascx
    • PopUp.aspx

【问题讨论】:

  • 什么是Components.BasicData?如果它是 UserControl,如果您想动态添加它,则应该使用 Page.LoadControl("BasicData.ascx") 加载它,或者如果它已经在页面上,则直接引用它。
  • 感谢蒂姆,您的回答 ^.^ 我尝试使用 Components.BasicData,在此行之前使用 Components.BasicData basicData= new Components.BasicData();,但这不起作用。

标签: c# asp.net nullreferenceexception


【解决方案1】:

Components.BasicData basicData= new Components.BasicData();这一行不是创建自定义控件和他的所有内部控件,而是指向现有控件的指针。

如果你已经准备好在这个页面上包含你的控件,那么你可以直接通过它的控件id调用这个函数。这个控件已经和你的页面一起存在了,调用它就行了。

protected void btnSave_Click(object sender, EventArgs e)
    {
        Button save = (Button)sender;
        YourCustomControlID.LoadSeller("TEST", save.CommandArgument);
    }

现在,如果您希望将数据发送到下一页,您首先创建一个类来保存您的信息,并且它会在页面之间移动并填充数据。

在每个页面中,你都有一个对这个类的引用,一个变量,ether 创建一个新的 ether 从前一页获取它。你把它存储在 ViewState 上

现在从 Page1 -> Page2。

你把它从Page1发送到

PostBackUrl="Page2.aspx"

在 page2.aspx 中设置获取信息的位置

<%@ PreviousPageType VirtualPath="~/Page1.aspx" %>

然后你得到它们...

if (Page.PreviousPage != null)
{
    if(Page.PreviousPage.IsCrossPagePostBack == true)
    {
        GetTheClass = PreviousPage.MyDataClass;
    }
}

另一种手动方式是使您的类可串行化,通过 post 将其作为 xml 发送,然后在下一页上对其进行解码。

【讨论】:

  • 在我的示例中,我正在尝试您的第一种方法(但先将其设为对象,然后再使用该对象)。正如我所说,这会发送我的数据,但给我NULL 错误。我会试试你建议的课程。无论如何+1为你解释,好帖子。 (我不接受作为答案,因为,我不知道它是否适合我。)
  • @Nymos 是的,我认为第二种方式是您需要的方式。您可以从 PreviousPage 和函数调用,也许您可​​以调用您的函数 - 您只需要进行一些测试即可查看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 2022-11-24
  • 2014-12-30
相关资源
最近更新 更多