看来我一直在使用asp.net数据绑定这么久以来我忘记了一些基础知识。
我在没有数据绑定的ASPX页面中动态创建表。
foreach (XXX x in TTTT){ %>
<tr>
<td><%=x.val %></td>
<asp:ImageButton runat="server" CommandName="uiImgResolve_Click"
CommandArgument='<%=X.pkid%>' ImageUrl="../images/IMG.png"/>
<% } %>
您可能会看到我无法使用RUNAT = Server,或者如果我这样做,我无法为该行指定ID。这只是一个简单的例子,我试图做的事情要复杂得多,并且不利于数据绑定。在Classic ASP中,我们过去只调用一个JS方法,然后提交嵌入隐藏字段的PKID表单。它有一个更优雅的方法来解决这个问题(如果这有帮助,我们正在使用Jquery)
我说我非常熟悉所有.net控件并经常使用它们,在这种情况下它不是正确的工具。
答案 0 :(得分:1)
您可以通过查询字符串传递参数
这样的事情:
foreach (XXX x in TTTT){ %>
<tr>
<td><%=x.val %></td>
<a href='?Action=Resolve&pkid=<%=X.pkid%>'>
<img src='../images/IMG.png' />
</a>
<% } %>
答案 1 :(得分:0)
我建议使用listview控件。像这样:
<asp:ListView ID="lvImages" runat="server" OnItemDataBound="lvImages_ItemDataBound">
<LayoutTemplate>
<table class="tblImages" cellpadding="0" cellspacing="0">
<tr class="ImageHeaderRow">
<td>Imagename</td>
<td>Image</td>
<td>Location</td>
</tr>
<asp:PlaceHolder ID="itemContainer" runat="server"></asp:PlaceHolder>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<asp:literal ID="ltrCell1" runat="server" />
<td><asp:ImageButton ID="imgMyImage" runat="server" /></td>
<td><asp:Label ID="lblLocation" runat="server" ></asp:Label></td>
</tr>
</ItemTemplate>
</asp:ListView>
代码背后:
protected void lvImages_ItemDataBound(object sender, ListViewItemEventArgs e) {
if (e.Item.ItemType == ListViewItemType.DataItem) {
ListViewDataItem currentItem = (ListViewDataItem)e.Item;
MyImageObject oImg = (MyImageObject)currentItem.DataItem;
Literal ltrCell1 = e.Item.FindControl("ltrCell1") as Literal;
ImageButton imgMyImage = e.Item.FindControl("imgMyImage") as ImageButton ;
Label lblLocation= e.Item.FindControl("lblLocation") as Label;
ltrCell1.text = string.format(@"<td id=""{0}"">{1}</td>", oImg.id, oImg.val);
imgMyImage.CommandArgument = oImg.arg;
imgMyImage.CommandName = "cmdNAme";
imgMyImage.ImageUrl = oImg.URL;
}
运气好!