单击时,首先输入方法,然后转到另一个页面

本文关键字:另一个 然后 方法 输入 单击 | 更新日期: 2023-09-27 18:29:27

我有一个图像和一个按钮。我有一种方法,可以从一组图像中随机生成一个图像。出于某种原因,当我点击按钮时,除了执行事件外,它还在图像的方法"选择图像"中再次输入,并生成另一个id。

在这里你可以找到图片的asp和图片按钮;

<asp:Image ID="Image1" runat="server" Height="300px" Width="200px" OnDataBinding="chooseImage" />

<asp:ImageButton ID="aboutBtn" src="Resources/Icons/HomeAboutMeBtn.png" OnClick="AboutBtn_Click" runat="server" />

下面我还发布了按钮的事件处理程序,其中childId是从"chooseImge"方法生成的,并存储在全局变量中。

protected void AboutBtn_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/ChildDescription.aspx?id=" + childId);
        }

有什么建议我为什么或如何做?基本上,我想将加载页面上显示的图像的id作为会话传递。

你可以在下面找到方法。基本上,首先我从数据库中读取一组记录。然后我将id存储在数组中,然后通过调用随机生成器方法,它将从数组中随机选择一个id。

protected void chooseImage(object sender, EventArgs e)
        {
            using (SqlConnection connection = new SqlConnection(conString))
            {
                try
                {
                    connection.Open();
                    using (SqlCommand cmd = new SqlCommand("GetAllChildren", connection))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                array.Add(reader["Child_ID"].ToString());
                                counter++;
                            }
                      connection.Close();
                        }
                    }
                }
                catch (Exception) { }
                if (array.Count != 0)
                {
                    try
                    {
                        using (SqlCommand command = new SqlCommand("GetChildDetails", connection))
                        {
                            command.CommandType = CommandType.StoredProcedure;
                            childId = Convert.ToInt32(array[RandomNumber(1, counter - 1)]);
                            command.Parameters.Add("@ChildID", SqlDbType.Int).Value = childId;
                            connection.Open();
                            using (SqlDataReader reader = command.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    Image1.ImageUrl = "Resources/Children Images/" + reader["Primary_Image"].ToString();
                                    ChildName.Text = reader["Child_Name"].ToString();
                                    ChildName.Font.Size = 20;
                                    surname.Text = reader["Child_Surname"].ToString();
                                    surname.Font.Size = 20;
                                    place.Text = reader["Location"].ToString();
                                    place.Font.Size = 14;
                                    genderLabel.Text = reader["Gender"].ToString();
                                    genderLabel.Font.Size = 14;
                                    DateTime birthday = DateTime.Parse(reader["Birthday"].ToString());
                                    DateTime now = DateTime.Today;
                                    int age = now.Year - birthday.Year;
                                    if (birthday > now.AddYears(-age))
                                    {
                                        age--;
                                    }
                                    Years.Text = age.ToString() + "-years-old";
                                    Years.Font.Size = 14;
                                }
                             connection.Close();
                            }
                        }
                    }
                    catch (Exception) { }
                }
            }
        }
        private int RandomNumber(int min, int max)
        {
            Random random = new Random();
            return random.Next(min, max);
        }

单击时,首先输入方法,然后转到另一个页面

单击该按钮时,在onclick之前将首先触发PostBack操作。如果你在onload方法中有可能只运行一次的代码,那么你需要用Page.IsPostBack来包装它,就像这里一样:

 if (!Page.IsPostBack) {
    chooseImage();
 }

您可以使用Session保存childid 的值

Session("id") = childId;

然后你可以使用:

protected void AboutBtn_Click(object sender, EventArgs e)
    {
        string id = (string) Session("id");
        Response.Redirect("~/ChildDescription.aspx?id=" + id);
    }

在Page_Load中检查IsPostBack:

if(!this.IsPostBack)
     chooseImage();

然后,您可以在Session或ViewState上保存您的ImageID。或者u可以使用Hidden TextBox来存储id,并使用Request["hiddenTextBoxId"]进行检索;

在ASPX页面上尝试添加隐藏的文本框:

<asp:HiddenField ID="txtId" runat="server" />

在选择的图像方法中,将id放入txtId

txtId.Text = yourid;

在响应之前。重定向从文本框中获取id:

id = txtId.Text;

仅当图像id不是回发时才调用生成图像id的方法。如果id不是回发的一部分,请将其保存在ViewState中。

  private void Page_Load()
  {
      if (!IsPostBack)
      {
          generateImageId();
      }
  }
相关文章: