C# 从一个<;李>;元素,位于Literal.text字符串内
我遇到以下问题:每当单击特定的C# 从一个<;李>;元素,位于Literal.text字符串内,c#,asp.net,C#,Asp.net,我遇到以下问题:每当单击特定的li时,我想调用一个方法。问题是,li是在literal.text字符串中动态创建的,我从数据库中导入内容。 每当我尝试调用一个方法时,它都不起作用。每当用户单击每个li时,我想调用一个方法,并在我的方法中获得li信息(尚未编写方法代码,因为我无法调用它) 想法 protected void Page_Load(object sender, EventArgs e) { string conString = "Provider=Microsoft.ACE.O
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");
}
受保护的无效页面加载(对象发送方,事件参数e)
{
string conString=“Provider=Microsoft.ACE.OLEDB.12.0;数据源=”
+Server.MapPath(“~/ebookstoredb.mdb”);
使用(OLEDB连接con=新OLEDB连接(构造))
{
con.Open();
string query=“从类别中选择*”;
使用(OleDbCommand cmd=new-OleDbCommand(query,con))
{
OleDbDataReader=cmd.ExecuteReader();
字符串msg=“”;
while(reader.Read())
{
lit1.Text+=“”+“- “+阅读器[“ID”]
+“,”+读卡器[“名称”]
+“
”
+“
”;
}
reader.Close();
}
con.Close();
}
}
受保护的无效产品信息(对象发送方、事件参数e)
{
重定向(“Default.aspx”);
}
我以前从未使用过文字,但通过阅读有关文字的内容。。。对于只显示静态html的文本,您需要让每个li调用一个javascript函数,然后该函数将回发到您想要的方法。因此,像这样构建您的li
:
lit1.Text += "<ul><li><a onclick=\"CallProductInfo(" + reader["ID"]+ ")\">" + reader["ID"]
+ "," + reader["Name"]
+ "</a></li></ul>";
if (Request["__EVENTTARGET"] == "ProductInfoId")
{
ProductInfo(Convert.ToInt64(Request["__EVENTARGUMENT"]));
}
我以前从未使用过文字,但从阅读中。。。对于只显示静态html的文本,您需要让每个li调用一个javascript函数,然后该函数将回发到您想要的方法。因此,像这样构建您的
li
:
lit1.Text += "<ul><li><a onclick=\"CallProductInfo(" + reader["ID"]+ ")\">" + reader["ID"]
+ "," + reader["Name"]
+ "</a></li></ul>";
if (Request["__EVENTTARGET"] == "ProductInfoId")
{
ProductInfo(Convert.ToInt64(Request["__EVENTARGUMENT"]));
}
不幸的是,您无法在文本控件上创建服务器端事件 但是,您可以添加客户端javascript功能来回发请求 在您的aspx中使用:
<div>
<asp:Literal runat="server" ID="lit1"></asp:Literal>
</div>
您的aspx.cs应包含:
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"]);
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!Page.IsPostBack)
{
lit1.Text+=“”+“很遗憾,您无法在文本控件上创建服务器端事件
但是,您可以添加客户端javascript功能来回发请求
在您的aspx中使用:
<div>
<asp:Literal runat="server" ID="lit1"></asp:Literal>
</div>
您的aspx.cs应包含:
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"]);
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!Page.IsPostBack)
{
lit1.Text+=“”+“好了,伙计们,我发现了问题所在。我们的genious老师今天告诉我们,我们可以使用数据网格。唉。
谢谢大家的回复!好了,伙计们,我发现了问题所在。我们的genious老师今天告诉我们,我们可以使用datagrid。唉。
谢谢大家的回复!为什么不使用控件而不是文字呢?@DStanley这是我大学课堂上的练习。我被要求用文字来练习!{sigh}你一定很喜欢那些教人们以错误的方式做事的学校……那么他们教你如何添加点击处理程序了吗?@DimitrisHD我认为你的老师并不像你所描述的那样使用文字。问题是li标记是动态添加的,所以客户端html不能调用
ProductsInfo()
event,除非您将ProductsInfo设置为。这会增加代码的复杂性。@DimitrisHD抱歉,我给了您错误的方法。我所做的几乎是重复您的问题……为什么不使用控件而不是文本?@DStanley这是我大学课堂上的练习。我被要求使用文本来完成它!{叹气}你一定很喜欢那些教人们以错误的方式做事的学校……那么他们教你如何添加点击处理程序了吗?@DimitrisHD我认为你的老师并不像你所描述的那样使用文字。问题是li标记是动态添加的,所以客户端html不能调用ProductsInfo()
event,除非您将ProductsInfo设置为。这会增加代码的复杂性。@DimitrisHD抱歉,我给了您错误的方法。我所做的几乎是重复您的问题……请您完成这项工作好吗?您真的需要回发到代码中的方法,还是只需重定向到将显示inf的某个页面o对于那个特定的产品id?我想显示每个类别的所有项目,所以是的,我需要一个方法,该方法对上面的代码执行类似的操作,但对于产品(显示单击的类别中的所有产品)我认为类似于我上面提到的东西会起作用。关键是因为文本只显示静态html(尽管我从未使用过文本),您必须调用javascript客户端函数。然后,如果您真的想保持在同一页面上,javascript必须执行回发。回发时,代码必须区分您使用产品id进行的回发,并转到正确的方法。由于这不是对事件处理程序的正确回发,因此您必须执行EVENTTARGET和EVENTARGUMENT之类的东西。虽然这在技术上可能有效,但我高度怀疑分配的目的是重新创建客户端回发代码。请完成这项任务好吗?您真的需要回发到代码中的某个方法,还是只重定向到某个页面,该页面将显示特定产品id的信息?我想要要显示每个类别的所有项目,所以是的,我需要一个方法,该方法对上面的代码执行类似的操作,但对于产品(显示单击的类别中的所有产品),我认为类似于我上面所述的操作会起作用。关键是因为文本显示静态html