单击时,首先输入方法,然后转到另一个页面
本文关键字:另一个 然后 方法 输入 单击 | 更新日期: 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();
}
}