Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在加载页面之前运行按钮事件处理程序_C#_Asp.net - Fatal编程技术网

C# 在加载页面之前运行按钮事件处理程序

C# 在加载页面之前运行按钮事件处理程序,c#,asp.net,C#,Asp.net,我有一个表,其中包含数据库中的所有对象。我在页面加载函数中加载它们。我有一个文本字段和一个按钮,当单击按钮时,我希望单击的处理程序将一个新对象的名称写在db的文本字段中 现在,我希望在单击之后,页面会再次加载表中的新项。问题是按钮事件处理程序在Page_Load函数之后运行 解决方法是在页面加载中使用IsPostBack或使用预加载功能。一个问题是,如果我有3个不同的按钮,我将不得不在它们之间有所不同,而不是有3个不同的方便功能 有没有解决这个问题的方法 代码: 您可以检查事件目标并执行所需操作

我有一个表,其中包含数据库中的所有对象。我在页面加载函数中加载它们。我有一个文本字段和一个按钮,当单击按钮时,我希望单击的处理程序将一个新对象的名称写在db的文本字段中

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

解决方法是在页面加载中使用IsPostBack或使用预加载功能。一个问题是,如果我有3个不同的按钮,我将不得不在它们之间有所不同,而不是有3个不同的方便功能

有没有解决这个问题的方法

代码:


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

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

也许您应该尝试在预渲染期间加载数据,而不是加载

    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
    }

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

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

这是一个老问题,但我在我的C#/ASP.NET网站中遇到了与母版页/内容页相同的问题:单击母版页上的链接应该更改内容页上gridview的查询参数。如您所述,按钮点击事件在
页面加载后处理。但是它是在
Page\u LoadComplete
之前处理的(请参阅有关的信息),因此您可以在那里更改页面内容

在我的例子中,我通过在母版页的click事件中设置一个会话变量,在内容页的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);
}

你不能在页面加载之前点击事件,但我不知道如何使用IsPostBack解决这个问题?是的,但是如果我有12个按钮调用呢?然后,我将有12个函数,12个if子句。真的不明白,您将只有一个if:IsPostBack,if true不要在OnLoad中使用额外的代码,不管是什么,按钮单击事件将完成它的任务。按钮单击事件仍然会发生,如果我不执行该函数,我将如何再次使用数据库中的数据填充表?我看不到您的所有代码,但如果您填充gridview之类的控件,可能不需要这样做,因为它们将在viewstate中维护这些数据。或者您可以调用填充按钮单击事件。无意冒犯,但您应该熟悉ASP.NET web表单中的常见模式:。或者最好像您的解决方案那样尝试ASP.NET MVCI,但它似乎不起作用。它进入函数,但不在表中显示数据,即使是第一次。也许是因为我把这个页面叫做“预渲染,加载数据”@Vadiklk:没有完整的代码很难回答。我假设“loaddatafromdb”还包括数据绑定部分(设置一个控制数据源并调用DataBind),如果您在加载期间仍然执行部分绑定。这行不通。另外,不可见控件上不会触发预渲染。我在我的LoadData函数(您的Page_预渲染函数)中进行绑定
protected void Page_LoadComplete(object sender, EventArgs e)
{
  string BindInfo = HttpContext.Current.Session["BindInfo"].ToString();
  YourBindDataFunction(BindInfo);
}