ItemTemplate中的控件事件并不能被触发,该如何解决
ItemTemplate中的控件事件并不能被触发
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
CodeBehind="GoodsList.aspx.cs" Inherits="NorthSeven.GoodsList" %>
<%@ Register Assembly="NorthSeven" Namespace="NorthSeven" TagPrefix="cc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
<script type="text/javascript">
window.onload = function () {
<%sh();%>
</script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<div style="width: 100%; height: 100%; overflow: hidden;">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BorderWidth="0px"
PageSize="5" Style="float: left;" ShowHeader="False" Width="20%" AllowPaging="False"
OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<div>
<img border="0" height="220" src='<%#DataBinder.Eval(Container.DataItem,"CotyImgAdrs")%>'
width="220">
<div>
<asp:Label class="price" ID="Label1" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"CotyUprice")%>'></asp:Label>
<asp:Button class="shopCar" ID="D1btnCar" runat="server" OnClick="D1btnCar_Click"
CommandName="Car1" AutoPostBack="true" CommandName="car1" Text="加入购物车"></asp:Button>
</div>
<div>
<asp:Button class="CotyName" ID="Button2" Width="200" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"CotyName")%>' />
<asp:Button class="CotyActyTxt" ID="Button3" Width="200" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"CotyActyTxt")%>' />
</div>
</div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</asp:Content>
-----------------------------------------------------------------------------------------------------------
貌似是ItemTemplate中的控件不能直接访问.cs文件中的事件,所以尝试了以下几种方式
1.前台手写上了OnClick="D1btnCar_Click"
后台中添加了对应的事件代码--断点调试不执行
protected void D1btnCar_Click(object sender, EventArgs e)
{
//想要执行的代码
}
2.添加OnRowCommand事件
前台添加:
OnRowCommand="GridView1_RowCommand"
后台添加:--断点调试不执行
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Car1")
{
//想要执行的代码
}
}
3. 绑定数据后,手动绑定事件
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
//用FindControl()方法遍历找到控件强转成控件类型
btn = this.GridView1.Rows[i].Cells[0].FindControl("D1btnCar") as Button;
btn.Click += new EventHandler(D1btnCar_Click);
}
--断点调试不执行
protected void D1btnCar_Click(object sender, EventArgs e)
{
Response.Write("<script>alert('删除成功!')</script>");
}
------解决思路----------------------
第一种,第二种绝对可行的,第一种通过NamingContainer可以获取到它的包含对象,第二种是默认天生支持的,你还是将你按钮上多余的属性删除试试,我已经看到了两个CommandName
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
CodeBehind="GoodsList.aspx.cs" Inherits="NorthSeven.GoodsList" %>
<%@ Register Assembly="NorthSeven" Namespace="NorthSeven" TagPrefix="cc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
<script type="text/javascript">
window.onload = function () {
<%sh();%>
</script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<div style="width: 100%; height: 100%; overflow: hidden;">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BorderWidth="0px"
PageSize="5" Style="float: left;" ShowHeader="False" Width="20%" AllowPaging="False"
OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<div>
<img border="0" height="220" src='<%#DataBinder.Eval(Container.DataItem,"CotyImgAdrs")%>'
width="220">
<div>
<asp:Label class="price" ID="Label1" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"CotyUprice")%>'></asp:Label>
<asp:Button class="shopCar" ID="D1btnCar" runat="server" OnClick="D1btnCar_Click"
CommandName="Car1" AutoPostBack="true" CommandName="car1" Text="加入购物车"></asp:Button>
</div>
<div>
<asp:Button class="CotyName" ID="Button2" Width="200" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"CotyName")%>' />
<asp:Button class="CotyActyTxt" ID="Button3" Width="200" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"CotyActyTxt")%>' />
</div>
</div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</asp:Content>
-----------------------------------------------------------------------------------------------------------
貌似是ItemTemplate中的控件不能直接访问.cs文件中的事件,所以尝试了以下几种方式
1.前台手写上了OnClick="D1btnCar_Click"
后台中添加了对应的事件代码--断点调试不执行
protected void D1btnCar_Click(object sender, EventArgs e)
{
//想要执行的代码
}
2.添加OnRowCommand事件
前台添加:
OnRowCommand="GridView1_RowCommand"
后台添加:--断点调试不执行
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Car1")
{
//想要执行的代码
}
}
3. 绑定数据后,手动绑定事件
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
//用FindControl()方法遍历找到控件强转成控件类型
btn = this.GridView1.Rows[i].Cells[0].FindControl("D1btnCar") as Button;
btn.Click += new EventHandler(D1btnCar_Click);
}
--断点调试不执行
protected void D1btnCar_Click(object sender, EventArgs e)
{
Response.Write("<script>alert('删除成功!')</script>");
}
------解决思路----------------------
第一种,第二种绝对可行的,第一种通过NamingContainer可以获取到它的包含对象,第二种是默认天生支持的,你还是将你按钮上多余的属性删除试试,我已经看到了两个CommandName