我是一名计算机基础年级学生,我正在为大学的一个项目设计一个基本的电子商务网站,并遇到了一个问题,让我头疼我的桌子
所以......
我根据会话变量中的内容(类型字典 - 键是产品ID,值是数量),在篮子页面的Page_Load方法中使用asp.net控件动态创建购物篮。 / p>
我可以从浏览页面添加项目,这些项目具有更多动态添加的控件,基于用户放置在数据库的products表中的任何内容,这样可以正常工作。
我可以用所有细节填充篮子,但我正在努力争取一个' - '和' +'按钮改变篮子里的数量。
我可以指定事件处理程序来在一个类中运行一个方法,该类一次添加(或删除)1个项目,但我遇到的问题是如果我将我的代码放在Page_Load中,则函数可以工作但是在事件之前呈现控件处理程序触发(所以当字典更新时,它没有显示新值 - 你必须刷新或添加另一个,然后你总是落后1)
如果我将代码放在PreRender中,则事件处理程序不会触发。
这是我在ASP.NET中的第一个项目,所以如果我用我的方法咆哮错误的树,请放轻松。
任何想法或正确方向的推动都会感激不尽
非常感谢提前
编辑添加更多细节
//creating my button
Button tdQtyDownButton = new Button();
tdQtyDownButton.ID = "qtyDown"+ row["prod_id"]; tdQtyDownButton.Text = "-";
tdQtyDownButton.Click += delegate (object sender1, EventArgs e1) {
ShoppingBasket.AddItem((int)row["prod_id"]); };
tdQtyDown.Controls.Add(tdQtyDownButton);
//in seperate ShoppingBasket class file
public static void AddItem(int prod_id)
{
if (HttpContext.Current.Session["basket"] != null)
{
if(!((Dictionary<int, int>)HttpContext.Current.Session["basket"]).ContainsKey(prod_id))
{
((Dictionary<int, int>)HttpContext.Current.Session["basket"]).Add(prod_id, 1);
}
else
{
int currentQty = 0;
((Dictionary<int, int>)HttpContext.Current.Session["basket"]).TryGetValue(prod_id, out currentQty);
((Dictionary<int, int>)HttpContext.Current.Session["basket"]).Remove(prod_id);
((Dictionary<int, int>)HttpContext.Current.Session["basket"]).Add(prod_id, currentQty + 1);
}
}
else
{
CreateBasket();
AddItem( prod_id);
}
}
正如我所说,它有点作用 - 我认为它只是一个生命周期问题,可能需要一个全新的方法
答案 0 :(得分:1)
对于Windows窗体应用程序
public partial class Form1 : Form
{
int i = 1;
int j = 1;
int rbCount = 0;
public Form1()
{
InitializeComponent();
}
private void buttonAddRadio_Click(object sender, EventArgs e)
{
RadioButton rb = new RadioButton();
rb.Name = "Radio Button" + i.ToString();
rb.Text = "Radio Button" + i;
rb.Left = 8;
rb.Top = 15 + (rbCount * 27);
rb.AutoSize = true;
rb.Click += new EventHandler(radio_click);
groupBox1.Controls.Add(rb);
i++;
rbCount++;
}
void radio_click(object sender, EventArgs e)
{
MessageBox.Show(((RadioButton)sender).Text);
}
private void buttonAddCheck_Click(object sender, EventArgs e)
{
CheckBox cb = new CheckBox();
cb.Name = "CheckBox" + j.ToString();
cb.Text = "CheckBox" + j;
cb.Left = 8;
cb.Top = 15 + (rbCount * 27);
cb.AutoSize = true;
cb.Click += new EventHandler(checkbox_checked);
groupBox1.Controls.Add(cb);
j++;
rbCount++;
}
void checkbox_checked(object sender, EventArgs e)
{
MessageBox.Show(((CheckBox)sender).Text);
}
}
对于ASP.NET Web应用程序
string[] myArray = new string[] { "Alex", "Bob", "John", "Srinivas", "Zamal", "Rahul" }
foreach (string item in myArray)
{
HyperLink myHyp = new HyperLink();
myHyp.Text = Suspect;
myHyp.NavigateUrl = "User Details.aspx?name=" + HttpUtility.UrlEncode(item));
myPanel.Controls.Add(new LiteralControl("<ul>"));
myPanel.Controls.Add(new LiteralControl("<li>"));
myPanel.Controls.Add(hpSuspect);
myPanel.Controls.Add(new LiteralControl("</li>"));
myPanel.Controls.Add(new LiteralControl("</ul>"));
}
N.B。 LiteralControl用于添加常规HTML控件。
答案 1 :(得分:0)
假设您想动态添加Button
并处理它的点击事件:
Button button1 = new Button();
button1.Text = "dynamic button";
button1.Left = 10; button1.Top = 10;
textBox1.Click += new EventHandler(btn_click);
this.Controls.Add(button1);
private void btn_click()
{
}
更新:根据您的评论,您似乎想要刷新页面而不重新加载...为此,您最简单的方法是SignalR或者您可以使用UpdatePanel Control