ASP.NET Linkbutton没有获取commandargument值的动态值

时间:2014-11-17 18:17:35

标签: asp.net linkbutton

    <%
      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 %>

1 个答案:

答案 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>