5

我有一张桌子,里面有我数据库中的所有对象。我将它们加载到我的 Page_Load 函数中。我有一个文本字段和一个按钮,当单击该按钮时,我希望该单击的处理程序放置一个新对象,该对象的名称写在数据库的文本字段中。

现在,我希望单击后发生的情况是页面再次加载表中的新项目。问题是按钮事件处理程序在 Page_Load 函数之后运行。

对此的解决方案是在 Page_Load 中使用 IsPostBack 或使用预加载功能。一个问题是,如果我有 3 个不同的按钮,我将不得不在它们之间进行区分,而不是拥有 3 个不同的便捷功能。

有没有没有这个问题的解决方案?

代码:

protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["userId"] == null)
                Response.Redirect("Login.aspx");

            // LOAD DATA FROM DB
        }

        protected void CreateObject(object sender, EventArgs e)
        {
            // SAVE THE NEW OBJECT
        }
4

5 回答 5

9

也许您应该尝试在 PreRender 期间加载数据而不是 Load

    protected void Page_Load(object sender, EventArgs e)
    {
        this.PreRender += Page_PreRender
        if (Session["userId"] == null)
            Response.Redirect("Login.aspx");
    }

    protected bool reloadNeeded {get; set;}

    protected void CreateObject(object sender, EventArgs e)
    {
        // SAVE THE NEW OBJECT
        reloadNeeded = true;
    }


    protected void Page_PreRender(object sender, EventArgs e)
    {
        if(reloadNeeded || !IsPostBack)
        // LOAD DATA FROM DB
    }
于 2012-04-30T14:49:42.257 回答
2

您可以检查事件目标并执行所需的操作:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
         string eventTarget = Page.Request.Params["__EVENTTARGET"];
         if(whatever)
         {
             //do your logic here
         }
    }
}

在 Page_Load 事件中获取控件名称,使回帖

于 2012-04-30T13:26:04.680 回答
0

使用Page_PreRenderComplete事件来检索您的表。这样一来,在所有用户事件触发后,您的页面将始终拥有可用的最新数据。

于 2012-04-30T15:06:01.413 回答
0

为什么不将单击事件中的内容移动到新方法中。然后将该方法作为页面加载的第一行调用?

于 2012-04-30T15:20:21.480 回答
0

一个老问题,但我在带有主/内容页面的 C#/ASP.NET 网站中遇到了同样的问题:单击主页面上的链接应该更改内容页面上网格视图的查询参数。正如您所说,按钮单击事件 Page_Load. 但它是之前 Page_LoadComplete处理的(请参阅有关ASP.NET Page Life Cycle的信息),因此您可以在那里更改页面内容。

就我而言,我通过在母版页的单击事件中设置会话变量、在内容页面的 Page_LoadComplete 事件中获取此变量并基于此进行数据绑定来解决了该问题。

母版页:

<asp:LinkButton ID="Btn1" runat="server" OnCommand="LinkCommand" CommandArgument="1" >Action 1</asp:LinkButton>
<asp:LinkButton ID="Btn2" runat="server" OnCommand="LinkCommand" CommandArgument="2" >Action 2</asp:LinkButton>

protected void LinkCommand(object sender, CommandEventArgs e)
{
  HttpContext.Current.Session["BindInfo", e.CommandArgument.ToString());
}

内容页:

protected void Page_LoadComplete(object sender, EventArgs e)
{
  string BindInfo = HttpContext.Current.Session["BindInfo"].ToString();
  YourBindDataFunction(BindInfo);
}
于 2018-04-17T15:11:14.697 回答