[英]Textbox value doesn't change on button click event in asp.net C#
我遇到了一個問題,我無法獲得任何控件的值,而不僅僅是按鈕點擊事件中的文本框,所以這里是場景,你可以跳過它,只是可以查看我的按鈕點擊事件
頁面產品正在執行2個操作
當用戶在更新頁面中單擊GridView上的編輯時,它會將其重定向到產品頁面進行更新,同一頁面也在執行創建產品操作,因此當我收到QueryString值時,我將更新產品表,當我不會這樣時,我只是執行創建操作。
現在,當沒有QueryString值時我就陷入困境,因此文本框正在使用新值進行更新,但是當存在時,所以他們不會給我一個新值。
這是我的代碼
在pageLoad事件我正在填充文本框,其中包含有更新操作的相應值
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["update"] !=null)
{
if (!Page.IsPostBack)
{
bindcategories();
bindachievments();
bindbrands();
}
int id = int.Parse(Request.QueryString["update"]);
string query = "SELECT * FROM ProductView WHERE id = " + id.ToString();
DataTable dtupd = new DataTable();
dtupd = param.All_data(query);
string name = "",available="",category="",brand="",achievement="",image="";
decimal price=0;
int unit = 0;
foreach (DataRow row in dtupd.Rows)
{
name = row.Field<string>("product_name");
price = row.Field<decimal>("price");
unit = row.Field<int>("unit");
image = row.Field<string>("product_image");
available = row.Field<string>("available");
category = row.Field<string>("category_name");
brand = row.Field<string>("brand_name");
achievement = row.Field<string>("achievement");
}
txt_name.Text = name;
txt_price.Text = price.ToString();
txt_unit.Text = unit.ToString();
product_image.ImageUrl = "../" + image;
dd_available.ClearSelection();
dd_available.SelectedValue = available;
dd_category.ClearSelection();
dd_category.Items.FindByText(category).Selected = true;
dd_brand.ClearSelection();
dd_brand.Items.FindByText(brand).Selected = true;
dd_achievment.ClearSelection();
dd_achievment.Items.FindByText(achievement).Selected = true;
btn_Insert.Text = "Update Product";
}
else
{
if (!Page.IsPostBack)
{
bindcategories();
bindbrands();
bindachievments();
}
if (!FileUpload1.HasFile)
{
product_image.ImageUrl = "../assets/images/products/default.png";
}
}
}
按鈕事件代碼
protected void btn_Insert_Click(object sender, EventArgs e)
{
getpicture();
SqlCommand cmd;
string pathimage ="";
if (pathimage == "")
{
pathimage = product_image.ImageUrl;
}
else
{
pathimage = ViewState["pathimage"].ToString();
}
if (Request.QueryString["update"] != null)
{
int id = int.Parse(Request.QueryString["update"]);
string query = "UPDATE Products SET product_name=@PRODUCTNAME,price=@PRIZE,unit=@UNIT,product_image=@IMAGE,available=@AVAILABLE,product_category=@CATEGORY,product_brand=@BRAND,product_achv=@ACHIV WHERE id = @ID";
cmd = new SqlCommand(query);
txt_name.Text = "";
cmd.Parameters.Add("@PRODUCTNAME", txt_name.Text);
cmd.Parameters.Add("@PRIZE", txt_price.Text);
cmd.Parameters.Add("@UNIT", txt_unit.Text);
cmd.Parameters.Add("@IMAGE", pathimage);
cmd.Parameters.Add("@AVAILABLE", dd_available.SelectedItem.ToString());
cmd.Parameters.Add("@CATEGORY", dd_category.SelectedValue);
cmd.Parameters.Add("@BRAND", dd_brand.SelectedValue);
cmd.Parameters.Add("@ACHIV", dd_achievment.SelectedValue);
cmd.Parameters.Add("@ID", id);
param.InsertUpdateData(cmd);
}
else
{
string query = "INSERT INTO Products(product_name,price,unit,product_image,available,product_category,product_brand,product_achv) VALUES(@PRODUCTNAME,@PRIZE,@UNIT,@IMAGE,@AVAILABLE,@CATEGORY,@BRAND,@ACHIV)";
cmd = new SqlCommand(query);
cmd.Parameters.Add("@PRODUCTNAME", txt_name.Text);
cmd.Parameters.Add("@PRIZE", txt_price.Text);
cmd.Parameters.Add("@UNIT", txt_unit.Text);
cmd.Parameters.Add("@IMAGE", pathimage);
cmd.Parameters.Add("@AVAILABLE", dd_available.SelectedItem.ToString());
cmd.Parameters.Add("@CATEGORY", dd_category.SelectedValue);
cmd.Parameters.Add("@BRAND", dd_brand.SelectedValue);
cmd.Parameters.Add("@ACHIV", dd_achievment.SelectedValue);
param.InsertUpdateData(cmd);
}
}
它是btn_submit中使用的getpicture函數
private void getpicture()
{
try
{
if (FileUpload1.PostedFile != null)
{
string FileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
string root = Server.MapPath("~");
string path = root + "assets\\images\\products\\";
FileUpload1.SaveAs(path + FileName);
ViewState["pathimage"] = "/assets/images/products/" + FileName;
this.product_image.ImageUrl = "../assets/images/products/upload.png";
}
else
{
Response.Write("Select an Image");
}
}
catch (Exception ex)
{
Response.Write("Select an Image");
}
}
提供數據訪問層也插入更新數據代碼
public Boolean InsertUpdateData(SqlCommand cmd)
{
String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["OnlineStoreConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(strConnString);
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
try
{
con.Open();
cmd.ExecuteNonQuery();
System.Web.HttpContext.Current.Response.Write("Succed");
return true;
}
catch (Exception ex)
{
System.Web.HttpContext.Current.Response.Write(ex.ToString());
return false;
}
finally
{
con.Close();
con.Dispose();
}
}
服務器控件
<div class="row">
<div class="col-md-6">
<asp:TextBox ID="txt_name" runat="server" CssClass="form-control" placeholder="Product Name"></asp:TextBox>
<br />
<asp:TextBox ID="txt_price" runat="server" CssClass="form-control" placeholder="Product Price"></asp:TextBox>
<br />
<asp:TextBox ID="txt_unit" runat="server" CssClass="form-control" placeholder="Product Unit"></asp:TextBox>
<br />
<asp:DropDownList ID="dd_available" runat="server" CssClass="form-control">
<asp:ListItem>Is Product Available</asp:ListItem>
<asp:ListItem>Available</asp:ListItem>
<asp:ListItem>Not Avaliable</asp:ListItem>
</asp:DropDownList>
<br />
<asp:DropDownList ID="dd_category" runat="server" CssClass="form-control"></asp:DropDownList>
<br />
<asp:DropDownList ID="dd_brand" runat="server" CssClass="form-control"></asp:DropDownList>
<br />
<asp:DropDownList ID="dd_achievment" runat="server" CssClass="form-control"></asp:DropDownList>
<br />
</div>
<div class="col-md-2"></div>
<div class="col-md-4">
<asp:Image ID="product_image" runat="server" style="height:231px;width:225px;" CssClass="form-control" />
<asp:FileUpload ID="FileUpload1" runat="server" onchange = "show_image(this);" />
</div>
</div>
<br />
<div class="row">
<div class="col-md-3 col-md-offset-6">
<asp:Button ID="btn_Insert" runat="server" Text="Create Product" CssClass="btn btn-primary btn-lg" OnClick="btn_Insert_Click" />
</div>
</div>
在單擊更新按鈕之前
我分別更新文本框值后,單擊按鈕上傳沒有我的服務器控件值更改。 這里是
但是在創建產品的情況下它可以工作
Saad,我認為錯誤發生在page_load事件中。 如果在您的查詢字符串中更新參數不為空,那么您始終使用數據庫的數據替換文本框。 你的代碼應該是這樣的
protected void Page_Load(object sender, EventArgs e) { if (Request.QueryString["update"] !=null) { if (!Page.IsPostBack) { bindcategories(); bindachievments(); bindbrands(); int id = int.Parse(Request.QueryString["update"]); string query = "SELECT * FROM ProductView WHERE id = " + id.ToString(); DataTable dtupd = new DataTable(); dtupd = param.All_data(query); string name = "",available="",category="",brand="",achievement="",image=""; decimal price=0; int unit = 0; foreach (DataRow row in dtupd.Rows) { name = row.Field<string>("product_name"); price = row.Field<decimal>("price"); unit = row.Field<int>("unit"); image = row.Field<string>("product_image"); available = row.Field<string>("available"); category = row.Field<string>("category_name"); brand = row.Field<string>("brand_name"); achievement = row.Field<string>("achievement"); } txt_name.Text = name; txt_price.Text = price.ToString(); txt_unit.Text = unit.ToString(); product_image.ImageUrl = "../" + image; dd_available.ClearSelection(); dd_available.SelectedValue = available; dd_category.ClearSelection(); dd_category.Items.FindByText(category).Selected = true; dd_brand.ClearSelection(); dd_brand.Items.FindByText(brand).Selected = true; dd_achievment.ClearSelection(); dd_achievment.Items.FindByText(achievement).Selected = true; btn_Insert.Text = "Update Product"; } } else { if (!Page.IsPostBack) { bindcategories(); bindbrands(); bindachievments(); } if (!FileUpload1.HasFile) { product_image.ImageUrl = "../assets/images/products/default.png"; } } }
希望能幫助到你...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.