<%
foreach (training t in traininglist)
{
%>
<tr>
<td><%=t.TrainingId%></td>
<td><%=t.TrainingName%></td>
<td>
<asp:LinkButton runat="server" ID="EditBtn"
Text="Edit" OnCommand="editbtn_OnCommand"
CommandArgument='<%# t.TrainingId %>' CommandName="edit" />
</td>
</tr>
<% } %>
其中,
培训是类,培训列表List<training>
在代码隐藏中的Page_Load()
函数中定义。
我想打电话给
public void editbtn_OnCommand(object sender, CommandEventArgs e)
{
String myeid = e.CommandArgument.ToString();
....
}
在这里,myeid没有获得价值,但始终显示<%# t.TrainingId %>
我已经尝试过所有其他选项,例如<%: t.TrainingId %> or <%=t.TrainingId %>
答案 0 :(得分:0)
代码"<%= %>"
的输出更可能类似于代码中使用Response.Write
。所以这些标签用于显示响应对象的值。
这就是为什么,根据我的理解,除非您使用DataBinding,否则您无法使用这些标记来设置控件的命令参数属性。如果您使用的是DataBinding,那么这些标记"<%= %>"
用于设置控件的属性。
因为你在这里循环遍历html表中列表中的每个项目,我的建议是使用GridView或Repeater,然后通过List对象绑定。如果你使用这种方式,你也可以摆脱html表的不必要的格式问题。
参考http://msdn.microsoft.com/en-us/library/6dwsdcf5(VS.71).aspx
如果你想使用转发器,那么你可以使用这些特定的标签,这应该是你的代码(不是实际代码,只是样本)
<asp:Repeater id="myRepeater" runat="server" >
<ItemTemplate>
<div>
<asp:LinkButton runat="server" id="EditBtn" CommandName="edit"
CommandArgument="<%#Container.DataItem.TrainingId %>" Text="Edit"
OnCommand="editbtn_OnCommand" />
</div>
</ItemTemplate>
</asp:Repeater>