asp.NET:如何访问直放站生成的元素?(asp.NET: How to access repea

2019-10-28 16:04发布

我比创建一个表转发:

<itemtemplate>
   <tr id="theTableRow" runat="server">
      <td>
         <asp:LinkButton runat="server"
            OnClientClick="todo"
            Text="Do Something" />
      </td>
   </tr>
</itemtemplate>

注: OnClientClick="todo"行。

在最终渲染代码,我想待办事项包含的JavaScript函数的调用,通过:

  • 所生成的表的行的ID,和
  • 当前绑定对象的性质的评估和演示

而现在对于一些伪代码

伪1:

的OnClientClick = “DoSomething的(theTableRow,CromulentGuid);返回false;”

伪代码2

的OnClientClick = “JavaScript的:DoSomething的(theTableRow,CromulentGuid);返回false;”

3伪代码

的OnClientClick = “JavaScript的:DoSomething的(theTableRow,<%#的eval(” CromulentGuid “)%>);返回false;”

4伪代码

的OnClientClick = “JavaScript的:DoSomething的(<%= theTableRow%>,<%#的eval(” CromulentGuid “)%>);返回false;”

伪5

的OnClientClick ='的javascript:DoSomething的(<%=的eval(theTableRow)%>,<%#的eval( “CromulentGuid”)%>); 返回false;”

无论ASP.NET代码中使用,我想呈现的HTML是:

<tr id="ctl00__itemRepeater_ctl01_theTableRow">
   <td>
      <a 
            onclick="DoSomething('ctl00__itemRepeater_ctl01_theTableRow', '19a149db-5675-4eee-835d-3d78372ca6f9'); return false;"
            href="javascript:__doPostBack('ctl00$itemRepeater$ctl01$ctl04','')">
         Do Something
      </a>
   </td>
</tr>

我也不会介意的:

<tr id="ctl00__itemRepeater_ctl01_theTableRow">
   <td>
      <a 
            onclick='DoSomething(&quot;ctl00__itemRepeater_ctl01_theTableRow&quot;, &quot;19a149db-5675-4eee-835d-3d78372ca6f9&quot;); return false;'
            href="javascript:__doPostBack('ctl00$itemRepeater$ctl01$ctl04','')">
         Do Something
      </a>
   </td>
</tr>

注:我可以接受第二个形式,因为我知道它在功能上是相同的,ASP.NET代码不能产生前,即使后者的可读性。


相关的问题:

ASP.NET:如何使用JavaScript访问中继器生成的元素?

Answer 1:

您可以使用OnItemDataBound事件来改变你的代码中的每个元素。 既然你是有讲究的HTML我也可能会建议采用混合的控制,而不是ASP的控制。 例如:

<itemtemplate>
   <tr id="theTableRow" runat="server">
      <td>
         <a runat="server"
            onclick="todo(this.parent.parent, '<%# Eval("Property") %>');return false;" >
            Do Something
         </a>
      </td>
   </tr>
</itemtemplate>

这可能不是100%的完美,正如我刚才在答复窗口中键入它直接和我总是搞砸了的eval()语法在我第一次去,但它应该帮助一些。



Answer 2:

更好的解决办法是把表现逻辑在业务层 :

介绍:

<asp:LinkButton runat="server"
     OnClientClick="<%# GetItemClientClick((MySomething)Container.DataItem) %>"
     Text="Do stuff" />

商业逻辑

protected string GetItemClientClick(MySomething item)
{
   ...   
   String szOnClientClick = 
      "return DeleteItem(this, "+
          Toolkit.QuotedStr(item.NodeGUID.ToString()) + ", "+
          Toolkit.QuotedStr(GetItemText(item))+");";

   return szOnClientClick;
}

干净多了。 更具有可读性。 更容易维护。



Answer 3:

为什么不把JS的表行?

<tr onClick="DoSomething(this, '<%# Eval("GUIDColumn") %>')"; ><td>
<%# Eval("ColumnText") %>
</td></tr>

这让你一个参考表行,那你需要的数据。 它打破下级的支持,从而为预期的IE6浏览器下,将没有真正的工作,但是这几乎是意料之中的事,这些天。

其他两种可能性是利用数据网格/ GridView的对象和OnItemDatabound方面或建表在利用ASP.NET TABLE控制代码,并通过您的数据源手动迭代。



文章来源: asp.NET: How to access repeater generated elements?