我在数据列表中有一个Dropdownlist
和一个按钮。我从下拉列表中选择项目数,然后将其传递给按钮事件以将其发送到数据库。
但我无法这样做。问题是变量selectedValue
仅在dditem_change
内部分配,尽管我已将其全局声明。
如何在DataList1_ItemCommand(object source, DataListCommandEventArgs e)
中访问其值。
以下是下拉列表更改的代码
public void dditem_change(object sender, EventArgs e)
{
var ddlList = (DropDownList)sender;
selectedValue = ((DropDownList)ddlList.NamingContainer.FindControl("drplist")).SelectedValue;
}
这是public void DataList1_ItemCommand
的代码public void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
if(e.CommandName == "Add")
{
if (Session["user"] == null)
{
Response.Write("<script>alert('Login First!!!');</script>");
}
else
{
string[] ar = e.CommandArgument.ToString().Split(',');
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=DTPXP-77A;Initial Catalog=practice;Integrated Security=true";
con.Open();
SqlCommand cmd = new SqlCommand("insert into cart values(@username,@prodname,@price,@stock)", con);
cmd.Parameters.Add("@username", SqlDbType.VarChar);
cmd.Parameters.Add("@prodname", SqlDbType.VarChar);
cmd.Parameters.Add("@price", SqlDbType.Int);
cmd.Parameters.Add("@stock", SqlDbType.Int);
cmd.Parameters["@username"].Value = Session["user"].ToString();
cmd.Parameters["@prodname"].Value = ar[0].ToString();
cmd.Parameters["@price"].Value = int.Parse(ar[1]);
cmd.Parameters["@stock"].Value = //selectedValue NOT ACCESSIBLE//
cmd.ExecuteNonQuery();
Response.Write("<script>alert('Successfully Added');</script>");
}
}
}
答案 0 :(得分:0)
这是ASP.NET page lifecycle的结果。当您选择下拉菜单时,这会导致您在其中存储selectedValue
变量的回发。然后当您触发导致另一个回发的按钮时,会导致selectedValue
在重新创建页面时丢失。
为了在回发之间保持价值,您需要将其存储在某处。例如,您可以使用Session
存储,例如
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
selectedValue = (string)Session["SelectedValue"];
}
}
public void dditem_change(object sender, EventArgs e)
{
var ddlList = (DropDownList)sender;
Session["SelectedValue"] = ((DropDownList)ddlList.NamingContainer.FindControl("drplist")).SelectedValue;
}
public void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
// selectedValue should now be accessible
}
考虑到数据有多小,并且假设它实际上是 view ,可能最好放在ViewState。
答案 1 :(得分:-1)
为什么不直接在需要的位置读取值? 在这种情况下,您不需要在“selectedValue”变量中存储任何内容。类似的东西:
cmd.Parameters["@stock"].Value =
((DropDownList)FindControl("drpList")).SelectedValue;
编辑:我将演员表添加到DropDownList。