__dopostback repeater 中的使用

问题描述

各位大侠我想请问__dopostback在repeater中使用后,服务器端是怎么处理的?也就是说服务器端怎么知道我当前获取的是repeater中的哪一行。部分代码如下<aid="repCollegeList_lbSelect_0"href="javascript:__doPostBack('repCollegeList$ctl01$lbSelect','')">选择</a>

解决方案

解决方案二:
首先,要在服务器端捕获事件,要选择一个支持此机制的控件。然后,要为这个控件绑定“自定义属性”,不用绕弯子去求别的什么东西来告诉你“当前获取的是的哪一行”。符合这样两个知识点,就可以写<arunat="server"onserverclick="abc_ServerClick"my-data-key='<%#Eval("field_name")%>'>选择</a>

protectedvoidabc_ServerClick(objectsender,EventArgse){varctl=(HtmlAnchor)sender;varkey=ctl.Attributes["my-data-key"];.......}

这里,把数据源中的一个字段field_name绑定到链接上,然后在链接被点击时,直接从服务器端事件中把所绑定的字段值取出来了。根本不用管它是放在Repeater控件还是别的什么控件中。把这个小事情设计明白了,放到任意的大的程序模块中也无可挑剔;相反地,纠结于Repeater,反而不会设计出好的代码。
解决方案三:
假设你不去绑定自定义属性,“绕一下”,怎样获得其它数据呢?假设在与你的Hyperlink相同级别还有一个Button控件,你可以使用varbtn=ctl.FindControl("Button1");

去获取它。你也可以使用varitem=(RepeaterItem)ctl.NamingContainer;

等方式来获取容器控件。这些虽然绕,但是也都是普通的asp.net知识范畴,都是按照原理来设计程序的思路。
解决方案四:
如果你是想理解onserverclick="abc_ServerClick"是如何起作用过的,我稍微说一点。实际上这需要学点asp.net控件开发入门知识,不过现在的asp.net基本上都是只“入门”,也就是说学的asp.net知识连15%都不到,因此缺乏这方面的基础。没有基础,可能你就觉得什么都很难懂;有了基础,就“刚好”能顺利理解一些东西。你可以打开上述代码的浏览器端的html源代码,可以看到<a>标签自动产生的href属性中,每一个__doPosrback函数的第一个参数都是不一样的,它实际上就对应着服务器端将来重建此Repeater对象时对于内部每一行中的HtmlAnchor的唯一标识,而且这个标识其实是按照namingcontainer层次去分层的(repCollegeList是第一层,ctl01是第二层,lbSelect是第三层)。当页面回发时,在页面post提交的参数中,有__EVENTTARGET和__EVENTARGUMENT表示在各种xxxChanged事件触发完毕之后还应该触发某一个postback回发事件,然后asp.net就按照上述“第一层、第二层、第三层”去找到相应的控件。如果找到符合此层次描述的控件,判断它是否实现了IPostBackEventHandler接口,如果实现了则调用RaisePostBackEvent方法(在你贴出的代码中,RaisePostBackEvent方法的第二个参数是"",既空串)。对于HtmlAnchor控件来说,你打开其源代码就能看到,它的RaisePostBackEvent方法中委派地触发了ServerClick事件。结果,当浏览器端页面回发时,就准确地触发了某一个HtmlAnchor控件的ServerClick事件,而其它的HtmlAnchor控件并不触发事件。这就是onserverclick="abc_ServerClick"所描述的功能。

时间: 2024-12-02 09:06:19

__dopostback repeater 中的使用的相关文章

Repeater中嵌套Repeater的示例介绍

 在某些特殊情况下是需要在Repeater中嵌套使用Repeater的,下面有个不错的示例,感兴趣的朋友可以参考下 代码如下: protected void Page_Load(object sender, EventArgs e)  {  if (!Page.IsPostBack)  {  this.dtCategory = GetCategoryTable();  this.dtProduct = GetProductTable();  rptCategoryList.DataSource

在Repeater中嵌套使用Repeater

在一般的网站中浏览类别的用户控件通常都位于大多数 ASP.NET 页的左边,它使用户能够按类别快速的查找产品.最近遇到一个客户,因为在他网站上展示的产品并不多,所以要求在原有类别浏览的基础上将产品也加进去.一来更方便,二来加长了左部导航栏的长度使页面更协调.原有的分类导航栏是由Repeater实现的,现在需要在每一个分类下加入该类的商品信息,于是我想到了在原有Repeater中嵌套Repeater.实现界面如下: 前台页面部分: <asp:Repeater id="rptCategorie

简单的DataGrid、DataList、Repeater中的超链接

datagrid|链接 1.DataGrid中:<asp:HyperLinkColumn Target="_blank" DataNavigateUrlField="m_id" DataNavigateUrlFormatString="view.aspx?id={0}" DataTextField="m_title"></asp:HyperLinkColumn>2.DataList.Repeater中&

asp.net中在repeater中嵌套RadioButtonList控件

问题描述 asp.net中在repeater中嵌套RadioButtonList控件 asp.net中在repeater中嵌套RadioButtonList控件,例如一道题目,四个选项,如何绑定RadioButtonList的值,如何获取RadioButtonList被选中的值 解决方案 http://stackoverflow.com/questions/11077534/asp-net-radiobuttonlist-in-repeater 解决方案二: asp.net Repeater嵌套

js获取repeater中动态产生的textbox中的text值

问题描述 js获取repeater中动态产生的textbox中的text值 js获取repeater中动态产生的textbox中的text值 解决方案 document.getElementsByTagName('input')然后遍历.而且腻获取textbox场景是什么也不懂,右边是通过传入点击对象进入函数,然后通过dom关系获取 解决方案二: 为何我取到的值一直是空值? 解决方案三: 如何用JS获取ASP.net中的textbox的值 js获不到text值 解决方案四: public cla

asp.net怎么取repeater中的行号

问题描述 repeater中两个"更新"按钮html的用来弹出框要来提示确定和取消的确定后触发下面一个asp按钮(隐藏的)的click事件从而更新数据.请问我如何将该行的行号传到后台?行号都取到了 解决方案 解决方案二:更新用行号?也许有时所谓的行号并非是记录的主键值.建议还是使用主键值为好.Repeater设置主键:解决方案三:放在hiddenfield里?解决方案四:直接用asp:linkbutton就可以搞定了都不要前台写提示解决方案五:<asp:LinkButtonID=

c#中如何后台控制Repeater中label控件Text值随下拉改变

问题描述 RT,我前台有个下拉Currency,想通过下拉框选择事件改变Repeater中一个label(id=CurrencyNew)的text值.如果不是Repeater中的话我知道是用CurrencyNew.Text=ddlCurreny.SelectedValue;但是Repeater中的话后台都找不出来CurrencyNew.我是新手,麻烦大神能解答下吗?谢谢各位啦 解决方案

repeater中的button事情

问题描述 大家好,在repeater中放一个button按钮,切换到设计中看不到这个按钮.在按钮属性中也没有闪光符号(事件),不能直接在设计中双击就自动生成事件.大家平时是怎么处理的? 解决方案 解决方案二:repeater中的按钮不能直接生成事件的,你在页面中也不能直接找到按钮,需要用到findcontrol解决方案三:引用楼主emqgowyq的回复: 大家好,在repeater中放一个button按钮,切换到设计中看不到这个按钮.在按钮属性中也没有闪光符号(事件),不能直接在设计中双击就自动

radiobutton-asp.net Repeater中取不到RadioButton的状态在线求解

问题描述 asp.net Repeater中取不到RadioButton的状态在线求解 <asp:Repeater ID="Repeater1" runat="server"><ItemTemplate><tr><td colspan="3" class="td1"> <span>ID:</span><asp:Label ID="lb1_1