想说下我的做法,以下是前台代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="shopCar.aspx.cs" Inherits="shopCar" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DataList ID="DataList1" runat="server" DataKeyField="id" DataSourceID="SqlDataSource1"
            OnItemCommand="DataList1_ItemCommand">
            <ItemTemplate>
                &nbsp;<asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>'></asp:Label><br />
                &nbsp;<asp:Label ID="priceLabel" runat="server" Text='<%# Eval("price") %>'></asp:Label><br />
                &nbsp;<asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>'></asp:Label><br />
                <br />
                <asp:Button ID="Button1" runat="server" CommandName="buy" OnClick="Button1_Click"
                    Text="购买" /><br />
            </ItemTemplate>
        </asp:DataList></div>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:B2CCon %>"
            SelectCommand="SELECT [id], [price], [name] FROM [GoodsDeatil]"></asp:SqlDataSource>
    </form>
</body>
</html>
后台代码:
  protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
    {
        string str = ((Label)e.Item.FindControl("idLabel")).Text;
        if (e.CommandName.ToLower() == "buy")
        {
            Response.Write("<script>alert(str)</script>");
        }
    }问题是:不能弹出javascript,应该是((Label)e.Item.FindControl("idLabel")).Text的问题,不过不知道怎麽写。要在button事件弹出id的值应该怎么写呢?

解决方案 »

  1.   

    假如是((Label)e.Item.FindControl("idLabel")).Text的问题,会报错。
    你把if (e.CommandName.ToLower() == "buy") 去掉,看看弹出什么。
      

  2.   

    结果都是一样,都报错是说:str未定义,难道javascript中弹出变量不是这样写?
    另外,((Label)e.Item.FindControl("idLabel")).Text 这样是无错的。我刚刚断点试过了,能得到值,这就是javascript变量的问题了
      

  3.   

    汗。搞了半天,终于知道那里出错了。
     Response.Write("<script>alert('" + str+ "');</script>");
    应该这样写。。还是谢谢你给的提示!
      

  4.   

    当我点击datalist外的Button时,又如何获得idlable的值呢?例如:
    前台代码:<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            &nbsp;</div>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:B2CConn %>"
                SelectCommand="SELECT * FROM [CarShop]"></asp:SqlDataSource>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
            <asp:DataList ID="DataList1" runat="server" DataKeyField="id" DataSourceID="SqlDataSource1">
                <ItemTemplate>
                    id:
                    <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>'></asp:Label><br />
                    name:
                    <asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>'></asp:Label>
                    <asp:Label ID="lbltest" runat="server" Text='<%# Eval("name") %>'></asp:Label><br />
                    num:
                    <asp:Label ID="numLabel" runat="server" Text='<%# Eval("num") %>'></asp:Label><br />
                    price:
                    <asp:Label ID="priceLabel" runat="server" Text='<%# Eval("price") %>'></asp:Label><br />
                    hotprice:
                    <asp:Label ID="hotpriceLabel" runat="server" Text='<%# Eval("hotprice") %>'></asp:Label><br />
                    customId:
                    <asp:Label ID="customIdLabel" runat="server" Text='<%# Eval("customId") %>'></asp:Label><br />
                    <br />
                </ItemTemplate>
            </asp:DataList>
        </form>
    </body>
    </html>后台:
    public partial class testAjax : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {    }
        protected void Button1_Click(object sender, EventArgs e)
        {
           string ss= ((Label)GridView1.FindControl("lbltest")).Text;
           Response.Write(ss);
        }
    }
      我后台打算这样取,但是报错的,取不到值?麻烦看看如何更改!
      

  5.   

    当我点击datalist外的Button时,又如何获得idlable的值呢?例如:
    前台代码:<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            &nbsp;</div>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:B2CConn %>"
                SelectCommand="SELECT * FROM [CarShop]"></asp:SqlDataSource>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
            <asp:DataList ID="DataList1" runat="server" DataKeyField="id" DataSourceID="SqlDataSource1">
                <ItemTemplate>
                    id:
                    <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>'></asp:Label><br />
                    name:
                    <asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>'></asp:Label>
                    <asp:Label ID="lbltest" runat="server" Text='<%# Eval("name") %>'></asp:Label><br />
                    num:
                    <asp:Label ID="numLabel" runat="server" Text='<%# Eval("num") %>'></asp:Label><br />
                    price:
                    <asp:Label ID="priceLabel" runat="server" Text='<%# Eval("price") %>'></asp:Label><br />
                    hotprice:
                    <asp:Label ID="hotpriceLabel" runat="server" Text='<%# Eval("hotprice") %>'></asp:Label><br />
                    customId:
                    <asp:Label ID="customIdLabel" runat="server" Text='<%# Eval("customId") %>'></asp:Label><br />
                    <br />
                </ItemTemplate>
            </asp:DataList>
        </form>
    </body>
    </html>后台:
    public partial class testAjax : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {    }
        protected void Button1_Click(object sender, EventArgs e)
        {
           string ss= ((Label)GridView1.FindControl("lbltest")).Text;
           Response.Write(ss);
        }
    }
      我后台打算这样取,但是报错的,取不到值?麻烦看看如何更改!
      

  6.   

    如果Label是在GridView1中的,则需要到当前行中FindControl才能找到