我想在我的网站上设置搜索功能。用户在文本框中键入一些信息,然后单击搜索按钮。单击搜索按钮后,将使用文本框中的文本搜索数据库,并将结果显示在表格中。如果文本框中的文本与数据库中的一个结果完全匹配,而不是显示结果列表,则会在页面中填充有关匹配结果的详细信息。
为了更容易精确匹配结果,我想在每个结果旁边添加一个按钮,“选择”该结果,在文本框中填入该结果的文本,然后用详细信息填充页面。这就是我所拥有的。
点击搜索按钮后,在检查结果是否完全匹配后,我创建了一个包含结果和按钮的表:
for(int x=0; x < res_list.Length; x++)
{
TableRow newRow = new TableRow();
TableCell textCell = new TableCell();
TableCell buttonCell = new TableCell();
buttonCell.ID = "bc" + x;
Button cellButton = new Button();
cellButton.ID = "btn" + x;
textCell.Text = res_list[x];
textCell.Attributes.Add("Width","60%");
cellButton.Text = x.ToString();
// cellButton.OnClientClick = "NameClick"; This property refers to client-side scripts, which I am not using.
cellButton.Click += new EventHandler(NameClick);
buttonCell.Controls.Add(cellButton);
newRow.Cells.Add(firstCell);
newRow.Cells.Add(buttonCell);
myTable.Rows.Add(newRow);
}
我已经尝试过OnClientClick方法和上面看到的Click方法,两者都产生了相同的结果。
我的NameClick功能如下:
void NameClick(object sender, EventArgs e)
{
Button sendButton = (Button)sender;
int index = Int32.Parse(sendButton.Text);
SearchTextBox.Text = myTable.Rows[index].Cells[0].Text;
return;
}
我在NameClick函数的开头设置了一个断点,当我单击其中一个按钮时,它永远不会到达。为什么我的按钮没有调用此函数?
编辑:如果可能,我想在不使用JavaScript的情况下完成此任务。
答案 0 :(得分:4)
您使用的是cellButton.OnClientClick = "NameClick";
,但实际上您的javascript中是否有NameClick
个功能?如果没有,单击该按钮将导致JS错误,这可能会阻止回发。
除此之外,建议将明确的ID分配给以编程方式创建的控件。否则,自动生成的ID可能会在回发时更改,这将阻止控制事件触发。
以下内容应该有效(未经测试):
myTable.ID = "someid";
for (int x=0; x < res_list.Length; x++)
{
TableRow newRow = new TableRow();
newRow.ID = "r" + x;
TableCell textCell = new TableCell();
TableCell buttonCell = new TableCell();
buttonCell.ID = "bc" + x;
Button cellButton = new Button();
cellButton.ID = "btn" + x;
textCell.Text = res_list[x];
textCell.Attributes.Add("Width","60%");
cellButton.Text = x.ToString();
//cellButton.OnClientClick = "NameClick"; // not needed unless you have actual JS for it
cellButton.Click += new EventHandler(NameClick);
buttonCell.Controls.Add(cellButton);
newRow.Cells.Add(firstCell);
newRow.Cells.Add(buttonCell);
myTable.Rows.Add(newRow);
}
答案 1 :(得分:1)
cellButton.OnClientClick
应指向客户端功能,即JavaScript。你在某个地方有JS功能吗?
如果答案是否定的,那么我们就找到了您的问题。你应该创建一个。将动态生成的控件的ClientIDMode
属性设置为Static
或Predictable
会很有帮助,因此您的JS函数可以轻松访问它们。
您是否需要JS功能方面的帮助?
答案 2 :(得分:1)
当您单击该按钮时,该页面将再次启动生命周期,您的控件将不再存在于您需要再次创建控件的页面中,或者将其保存在viewstate中或使用控件状态 当他在生命周期中回电时
在页面生命周期事件SaveControlState,loadControlState
中如果你想创建一个javascript click事件,你需要确保控件在javascript函数中没有调用服务器端事件,你需要返回false
答案 3 :(得分:-2)
您必须在asp语法中添加此事件以获取按钮。
<asp:Button runat="server " OnClick="ButtonClick"/>