首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

关于Repeater的回发有关问题

2012-03-17 
关于Repeater的回发问题!大家好,问题是这样:在页面上有个Repeater,代码如下:HTML codeasp:Repeater IDr

关于Repeater的回发问题!
大家好,问题是这样:
在页面上有个Repeater,代码如下:

HTML code
<asp:Repeater ID="rep" runat="server" OnItemCommand="rep_ItemCommand">                <ItemTemplate>                    <tr>                    <td><%#DataBinder.Eval(Container.DataItem,"Id") %></td>                    <td><%#DataBinder.Eval(Container.DataItem,"Name") %></td>                        <td>                            <asp:LinkButton ID="lbtn" runat="server" CommandName="del" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"Id") %>'>删除</asp:LinkButton>                        </td>                    </tr>                </ItemTemplate>            </asp:Repeater>

-------------------------------------
该页面生成后的html代码是这样:
HTML code
var theForm = document.forms['form1'];if (!theForm) {    theForm = document.form1;}function __doPostBack(eventTarget, eventArgument) {    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {        theForm.__EVENTTARGET.value = eventTarget;        theForm.__EVENTARGUMENT.value = eventArgument;        theForm.submit();    }}//]]></script>    <div>        <table>                    <tr>                    <td>0</td>                    <td>Name0</td>                        <td>                            <a id="rep_ctl00_lbtn" href="javascript:__doPostBack('rep$ctl00$lbtn','')">删除</a>                        </td>                    </tr>......

------------------------------------------------
我知道,控件通过__doPostBack向服务器进行回发,回发后,页框架就会搜索发送的内容,确定__EVENTTARGET.value的值是否与页面上实现了IPostBackEventHandler的服务器控件的Id相对应,如果对应了,调用该服务器控件的RaisePostBackEvent方法,从而达到回调服务器控件的服务端方法。
------------------------------------------------

问题是:
首先,我看Repeater并没有继承IPostBackEventHandler事件(它继承的Control和INamingContainer,同样这两个也都没有继承IPostBackEventHandler接口),那Repeater怎么捕捉的回发事件呢?

其次,即便Repeater通过某种方式,捕捉到了回发事件,看页面上,所有的linkButton生成的html代码变成了 <a id="rep_ctl00_lbtn" href="javascript:__doPostBack('rep$ctl00$lbtn','')">删除</a>,由于Repeater继承了INamingContainer,所以linkbutton的名字变成了rep$ctl00$lbtn,这样的话,在回发的时候,岂不是会去调用服务器控件ID为rep$ctl00$lbtn的事件了吗?而且这个Id的控件是没有的,所以应该找不到,它怎么会去调用Repeater的rep_ItemCommand事件呢?

----------------------------------------------------
请各位大侠不吝赐教,谢谢。

[解决办法]
没人回,分这么多!
问题解决吗!
[解决办法]
C# code
public class MyView : System.Web.UI.Control, System.Web.UI.IPostBackEventHandler public void RaisePostBackEvent(string eventArgument) { this.Initialize(); string[] parts = eventArgument.Split('='); string commandName = parts[0]; string value = (parts.Length > 1 ? parts[1] : null); switch (commandName .ToLower()) { case "Command1": .......
[解决办法]
http://hi.baidu.com/trip008/blog/item/85c49b19c633954042a9adea.html 查了一下 也学习了一下 感觉 不是很懂 呵呵
[解决办法]
repeater没有实现这个接口,但你的代码中
使用了asp:LinkButton这个模板,linkbutton继承了IPostBackEventHandler
[解决办法]
探讨
ok了,大家赶快来接分啊,要结贴了。

------解决方案--------------------


赶得好不如赶得巧。。
[解决办法]
rep$ctl00$lbtn这个是Name,不是Id
[解决办法]

探讨

引用:
ok了,大家赶快来接分啊,要结贴了。

那俺就不厚道了 学习了还能接分 下次有这好事 继续喊上俺 嘿嘿

[解决办法]
来抄底来了

热点排行