我遇到以下问题:我想在点击特定li
时调用方法。问题是li
是在literal.text
字符串中动态创建的,我在其中从我的数据库导入内容。
每当我尝试调用一个方法时,它都不起作用。我想在用户点击每个li
时调用一种方法,并在我的方法中获取li
信息(尚未编写方法代码,因为我无法获取它叫。)
想法?
protected void Page_Load(object sender, EventArgs e)
{
string conString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source="
+ Server.MapPath("~/ebookstoredb.mdb");
using (OleDbConnection con = new OleDbConnection(conString))
{
con.Open();
string query = "SELECT * FROM CATEGORY";
using (OleDbCommand cmd = new OleDbCommand(query, con))
{
OleDbDataReader reader = cmd.ExecuteReader();
String msg = "";
while (reader.Read())
{
lit1.Text += "<ul>" + "<li runat=\"server\" OnClick=\"ProductsInfo\">" + reader["ID"]
+ "," + reader["Name"]
+ "</li>"
+ "</ul>";
}
reader.Close();
}
con.Close();
}
}
protected void ProductsInfo(object sender, EventArgs e)
{
Response.Redirect("Default.aspx");
}
答案 0 :(得分:1)
我以前从未使用过文字,但是从阅读它们开始......用文字只显示静态html,你需要让每个li调用一个javascript函数,然后回复你想要的方法。所以建立你的li
就像这样:
lit1.Text += "<ul><li><a onclick=\"CallProductInfo(" + reader["ID"]+ ")\">" + reader["ID"]
+ "," + reader["Name"]
+ "</a></li></ul>";
然后你必须有一个javascript函数,它实际回发到服务器端代码或重定向到带有传递id的产品信息页面。也就是说,在你的页面中(不是后面的代码),为回发提供类似这样的脚本......
<script>
function CallProductInfo(id)
{
__doPostBack('ProductInfoId', id);
}
</script>
在你的代码背后,在你的页面加载事件处理程序中,你会有这样的东西:
if (Request["__EVENTTARGET"] == "ProductInfoId")
{
ProductInfo(Convert.ToInt64(Request["__EVENTARGUMENT"]));
}
答案 1 :(得分:1)
不幸的是,您无法在Literal Control上创建服务器端事件。
但是,您可以添加客户端JavaScript功能以回发请求。
在您的aspx中使用:
(defparameter *test-cases* ; list of (ARG RET)
'(((1 2 3) (2 3))
((1 (2 (3 4) 5) 6) (((4) 5) 6))
((1 (3 (5 6) 4) (7 8 9) 2) (((6) 4) (8 9) 2))))
(loop :for (arg ret) :in *test-cases* :do
(assert (equal (drop-first arg) ret))
(assert (equal (first-drop arg) ret)))
您的aspx.cs应包含:
<div>
<asp:Literal runat="server" ID="lit1"></asp:Literal>
</div>
这将设置每个protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
lit1.Text += "<ul>" + "<li \' onclick=\'javascript: __doPostBack(\"getProduct\", \"1\");\'>"
+ "Product " + "1"
+ "</li>"
+ "</ul>";
}
if (Request.Form["__EVENTTARGET"] != null && Request.Form["__EVENTTARGET"] == "getProduct")
{
getProduct_Click(null, null);
}
}
private void getProduct_Click(object sender, System.EventArgs e)
{
Response.Write("You Clicked on " + Request.Form["__EVENTARGUMENT"]);
}
以将它们自己的值传递给事件参数隐藏控件并执行回发到服务器。
然后,您可以检查事件目标是否是必需的,并使用已回发的值调用方法。
只需更改上面的示例lit1文本即可遍历您的数据。
答案 2 :(得分:0)
好的,大家好我发现了什么问题。我们先生的导师今天告诉我们,我们可以使用数据网格。高。 谢谢大家的回复!