__dopostback repeater 中的使用

HELLO456 2016-04-03 10:30:17
各位大侠 我想请问__dopostback 在repeater中使用后,服务器端是怎么处理的?也就是说服务器端怎么知道我当前获取的是repeater中的哪一行。部分代码如下 <a id="repCollegeList_lbSelect_0" href="javascript:__doPostBack('repCollegeList$ctl01$lbSelect','')">选择</a>
...全文
125 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果你是想理解 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" 所描述的功能。
  • 打赏
  • 举报
回复
假设你不去绑定自定义属性,“绕一下”,怎样获得其它数据呢? 假设在与你的 Hyperlink 相同级别还有一个 Button 控件,你可以使用
var btn = ctl.FindControl("Button1");
去获取它。你也可以使用
var item = (RepeaterItem)ctl.NamingContainer;
等方式来获取容器控件。这些虽然绕,但是也都是普通的 asp.net 知识范畴,都是按照原理来设计程序的思路。
  • 打赏
  • 举报
回复
首先,要在服务器端捕获事件,要选择一个支持此机制的控件。然后,要为这个控件绑定“自定义属性”,不用绕弯子去求别的什么东西来告诉你“当前获取的是的哪一行”。符合这样两个知识点,就可以写
<a runat="server" onserverclick="abc_ServerClick" my-data-key='<% #Eval("field_name") %>'>选择</a>
protected void abc_ServerClick(object sender, EventArgs e)
{
    var ctl = (HtmlAnchor)sender;
    var key = ctl.Attributes["my-data-key"];
    .......
}
这里,把数据源中的一个字段 field_name 绑定到链接上,然后在链接被点击时,直接从服务器端事件中把所绑定的字段值取出来了。 根本不用管它是放在 Repeater 控件还是别的什么控件中。把这个小事情设计明白了,放到任意的大的程序模块中也无可挑剔;相反地,纠结于 Repeater,反而不会设计出好的代码。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧