ASP.Net LinkButton的CommandArgument属性忽略<%= .. %>。

3
我正在尝试对一个ASP.Net LinkButton控件进行属性设置,但是出现了一些问题。ASP.Net忽略了标签,直接将值作为字符串传递。
<asp:LinkButton id="viewDetails" runat="server" Text="Details" OnClick="btnDetails_Click" CommandName="ItemID" CommandArgument="<%= item.ItemID %>" />

当链接被点击时,我使用以下方式处理它:
   protected void btnDetails_Click(object sender, EventArgs e)
   {
       try
       {
           LinkButton btn = (LinkButton)sender;
           if (btn.CommandName == "ItemID")
           {
               string itemID = btn.CommandArgument.ToString();               
           }
       }
       catch (Exception excp)
       {
           lblError.ForeColor = System.Drawing.Color.Red;
           lblError.Text = excp.Message;
       }
   }

问题在于itemID最终的值为"<%= item.ItemID %>"。
我看到其他人遇到了相同的问题,尝试了以下方法,但对我来说都没有起作用。
<asp:LinkButton id="viewDetails" runat="server" Text="Details" OnClick="btnDetails_Click" CommandName="ItemID" CommandArgument=<%= item.ItemID %> />

<asp:LinkButton id="viewDetails" runat="server" Text="Details" OnClick="btnDetails_Click" CommandName="ItemID" CommandArgument="<%# item.ItemID %>" />

您可能需要澄清“迄今为止都没有适合我的”的含义。 - Onkelborg
问题中展示的所有示例都没有产生期望的结果,即CommandArgument保持item.ItemID的值,而不是字符串"<%= item.ItemID %>"。 - sipsorcery
即使是最后一个例子?你真的得到了<%# item.ItemID %>? - Onkelborg
是的。我又读了一些资料,我认为数据绑定是正确的方法,而你指引了我正确的方向。 - sipsorcery
"<%=%>" 结构等同于调用 Response.Write,用于直接显示到响应流中。它不能用于设置服务器控件属性:相反,请使用数据绑定 ("<%# %>"),如一些答案所建议的那样。请参阅 http://msdn.microsoft.com/en-us/library/6dwsdcf5(VS.71).aspx。 - Joe
3个回答

2

试试这个

<asp:LinkButton id="viewDetails" runat="server" Text="Details" OnClick="btnDetails_Click" CommandName="ItemID" CommandArgument='<%= item.ItemID %>' />

请注意CommandArgument中的单引号。

1

这应该可以工作:

<asp:LinkButton id="viewDetails" runat="server" Text="Details" OnClick="btnDetails_Click" CommandName="ItemID" CommandArgument="<%# item.ItemID %>" />

你调用了 .DataBind() 吗?请参考kb


不行,我试过了,在我的问题底部有最后一个例子,但它没有起作用。 - sipsorcery
其实,我复制了那个例子。你调用了 .DataBind() 吗?出了什么问题?发生了什么事情? - Onkelborg
我更喜欢使用CommandArgument='<%# Container.DataItemIndex %>'。 - Independent

0
你可以在这里检查参考资料
<%: item.ItemID %>

新增于ASP.NET 4.0:

<%: %> 用于输出HTML编码的字符串(与<%= %>的使用方式相同)。它会自动对输入进行HTML编码,除非输入是IHtmlString(即某些东西表示它知道如何创建有效的HTML)。这意味着它几乎可以取代<%= %>(请参见http://haacked.com/archive/2009/09/25/html-encoding-code-nuggets.aspx

希望这能帮到您,如果需要进一步帮助,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接