随笔-45  评论-909  文章-2  trackbacks-3

有时我们会要在Repeater及DataList内部加一二个按纽,可如果我们也按照平常那样双击按纽的话,出现的不是类似这种

    protected void Button1_Click(object sender,EventArgs e)
    {

    }

如果你是第一次碰到这种情况是不是就不知道怎样写代码了呢?其实像下面代码的功能与上面一样,也是写OnClick事件。

    protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
      

    }

这只是简单的解决一个数据控件内一个按纽的情况,可如果里面有几个不同的按纽,我们又应该如何去实现它们不同的功能 呢?其实也是很简单的,我简单的贴一些代码出来,我想你就能明白。

 

前台.aspx:       

<asp:Repeater ID="Repeater1" runat="server" onitemcommand="Repeater1_ItemCommand">

        <ItemTemplate>

            <asp:LinkButton ID="LinkButton1" runat="server" CommandName="1">LinkButton</asp:LinkButton>

            <asp:LinkButton ID="LinkButton2" runat="server" CommandName="2">LinkButton</asp:LinkButton>

        </ItemTemplate>

        </asp:Repeater>

 

后台.cs:

    protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if (e.CommandName == "1")
        {
            Response.Write("d");

        }

        if (e.CommandName == "2")
        {
            Response.Write("dd");
        } 

    }

 

看明白了吧?其实很简单的,简单的判断一下。如果细心的你,你一定看到,上面的代码中使用的是LinkButton而不是Button,如果你上面的功能做出来了的话,你可以试一下,在数据控件添加Button会出现下面错误:

回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

 

具体原因的话,本人能力有限就不得而知。 好像ImageButton也不行的,也会出现上面的错误。如果有高手兄弟看到这篇文章的话,能麻烦指导一下。本人在做项目碰到这个问题,问了很多兄弟才搞定它,本来的代码基本正确,只可惜数据控件的ID搞错了,调试了好久最后在Jonllen兄弟的帮助下才发现这个问题,看来自己真的太粗心了。在此也感谢Jonllen兄弟,他还帮我解决很多问题了。

废话也就不多说了,这篇文章能帮助到你。

 

posted on 2008-08-14 13:02 石牌村夫 阅读(549) 评论(6)  编辑 收藏 网摘 所属分类: .NET

评论:
#1楼  2008-08-14 13:05 | 阿滨       
我的博客有另一种方法
  回复  引用  查看    
#2楼 [楼主] 2008-08-14 13:07 | 石牌村夫      
@阿滨
这位兄弟这么快啊,好好看下你的那篇文章,向你学习
  回复  引用  查看    
#3楼  2008-08-14 13:20 | Jonllen [未注册用户]
呵呵 `` LZ太客气了.
不过其实没有必要根据按纽的CommandName的再在ItemCommand事件里面去判断点那个按纽再去执行相应的事件 其实我们可以把放在Repeater及DataList模板里面的LinkButton 或其它按纽预先指定一个OnClick事件 再在服务器端事先写好
protected void LinkButton _Click(object sender,EventArgs e)
{

} 这个响应事件,一样的能实现那个效果,根据sender发生源对象能得到触发事件按纽的一些属性等。


  回复  引用    
#4楼 [楼主] 2008-08-14 13:42 | 石牌村夫      
@Jonllen
兄弟,这样也行啊,看来我又学到了新东西啊
  回复  引用  查看    
#5楼  2008-09-28 15:50 | 江湖小弟 [未注册用户]
貌似你在回发的时候是重复绑定,因为每次都是一个页面周期,所以要注意IsPostBack,否则Repeater控件中的Button始终Post到新的控件上了。我也遇到这样的问题,从别的地方找到的答案
  回复  引用    
#6楼  2008-10-21 10:08 | 古天 [未注册用户]
--引用--------------------------------------------------
Jonllen: 呵呵 `` LZ太客气了.
不过其实没有必要根据按纽的CommandName的再在ItemCommand事件里面去判断点那个按纽再去执行相应的事件 其实我们可以把放在Repeater及DataList模板里面的LinkButton 或其它按纽预先指定一个OnClick事件 再在服务器端事先写好
protected void LinkButton _Click(object sender,EventArgs e)
{

} 这个响应事件,一样的能实现那个效果,根据sender发生源对象能得到触发事件按纽的一些属性等。


--------------------------------------------------------
这样行吗?你是把按钮放在 ItemTemplate 在后代代码里是找不到这个控件的,因改按钮控件是在Repeater的控件树里,所以是无法找到的。所以你的方法是不行的。
  回复  引用    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索
[推荐职位]上海盛大网络招聘架构师



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接: