“关注图片”按钮就像魅力一样
<asp:ListView ID="ListView1" runat="server">
<layouttemplate>
<asp:PlaceHolder id="itemPlaceholder" runat="server" />
</layouttemplate>
<ItemTemplate>
<asp:ImageButton onmouseover="javascript:show('Error1');" ID="btnContainsError" runat="server"/>
</ItemTemplate>
</asp:ListView>
但现在我想为列表视图中的每条记录“使其工作”
因此,对于记录1,它应该像
<asp:ImageButton onmouseover="javascript:show('Error1');"
ID="btnContainsError" runat="server"/>
为第二条记录
<asp:ImageButton onmouseover="javascript:show('Error2');"
ID="btnContainsError" runat="server"/>
依旧......
不幸的是,我做的一些尝试(如下所示)会产生Server tag is not well formed
错误
<asp:ImageButton onmouseover="javascript:show('<%# "Error" & DataBinder.Eval(Container.DataItem, "Counter") %>');" ID="btnContainsError" runat="server"/>
那么请你指点一下,正确的方法吗?
答案 0 :(得分:1)
如果在属性中使用服务器端代码标记(<% %>
),则需要将属性值包装在单引号中而不是双引号中。
尝试将onmouseover属性更改为:
onmouseover='javascript:show("<%# "Error" + DataBinder.Eval(Container.DataItem, "Counter") %>");'
或者,您可以在后面的代码中创建一个方法并将其命名为
onmouseover='javascript:show("<%# GetErrorText(Container.DataItem) %>");
在您的代码中:
protected string GetErrorText(object dataItem)
{
return "Error" + (dataItem as MyObject).Counter;
}
答案 1 :(得分:1)
问题是你不能把这个串联放在&lt;%#%&gt;之内控件中的标签。在这种情况下我通常做的是在表单对象上创建一个公共属性,然后从控件中调用该属性。例如,将它放在后面代码的表单对象上:
Public Function GetError(ByVal sVal As String) As String
Return "Error " & sVal
End Function
然后你可以在你的aspx页面中添加以下内容:
<asp:ImageButton onmouseover="javascript:show('<%# GetError(DataBinder.Eval(Container.DataItem, "Counter")) %>');" ID="btnContainsError" runat="server"/>
这应该有用。
答案 2 :(得分:1)
以这种方式试试
<asp:ImageButton onmouseover='show(this.errorMessage);' errorMessage='<%# "Error" & DataBinder.Eval(Container.DataItem, "Counter") %>' ID="btnContainsError" runat="server"/>
答案 3 :(得分:0)
我认为您不能在任何服务器端控件中使用任何类型的<%
服务器端标记 - 即任何runat="server"
。
这是未经测试的,已经有一段时间了,因为我已经完成了任何经典的ASP.NET ......但是这里有了!
<asp:ListView ID="ListView1" runat="server" OnItemDataBound="ListView_OnItemDataBound">
<layouttemplate>
<asp:PlaceHolder id="itemPlaceholder" runat="server" />
</layouttemplate>
<ItemTemplate>
<asp:ImageButton ID="btnContainsError" runat="server"/>
</ItemTemplate>
</asp:ListView>
请注意OnItemDataBound
属性。
现在在你的代码中:
protected void ListView_OnItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem) //You might want to change this
{
//this will be what ever you are binding... so the T in IEnumerable<T> that is the ListView.DataSource
var someClassItem = e.Item.DataItem as SomeClass;
if (string.IsNullOrWhiteSpace(someClassItem.Counter))
{
ImageButton btnContainsError = e.Item.FindControl("btnContainsError") as ImageButton;
btnContainsError.Attributes["onmouseover"] = "javascript:show('Error" + someClassItem.Counter + "')";
}
}
}