服务器标记的格式不适合Gridview中的锚点标记
本文关键字:格式 服务器 不适合 Gridview | 更新日期: 2023-09-27 17:54:41
为什么选择
<a id="link" runat="server" href="javascript:downloadFile('<%#Eval("TempKey") %>')"><%#Eval("ShortFileName") %></a>
在我的asp.net应用程序中给我The server tag is not well formed
异常吗?
怎么了?如果我删除runat="server"
,那么它是可以的。但我需要从后面的代码中处理它(在网格视图中(。
非常感谢!!
在我的网格视图中,我使用了Linkbutton,并在OnClientClick上应用了以下代码。
<asp:TemplateField HeaderText="Print">
<ItemTemplate>
<asp:LinkButton ID="lbtn_prntmenu" runat="server" CssClass="mlinks" CommandArgument='<%#Eval("ID")%>' CommandName="Print" Text="Print" OnClientClick='<%#Eval("ID","javascript:downloadFile('"{0}'");")%>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
类似地,您可以在href
上使用<a>
元素
您会得到The server tag is not well formed
错误,因为您在双引号中使用双引号,使attribute-name="value"
的语法趋于混乱。它会被ASP.NET编译器解析为类似的东西
href="javascript:downloadFile('<%#Eval(" TempKey ") %>')">
TempKey将显示为没有值等的单独属性。
当您删除服务器标记时,ASP.NET不会解析html元素语法,而是按原样发出它(它的无效html以及但浏览器要宽容得多(。
你可能应该在等单引号内尝试
href='javascript:downloadFile("<%#Eval("TempKey") %>")'
编辑上面仍然会产生有问题的html,因为href值中会有未转义的双引号。所以试试这个:
href='javascript:downloadFile("<%#Eval("TempKey") %>")'
编辑上面似乎没有对数据绑定表达式进行求值。请尝试以下使用Eval
重载格式化的表达式
href='<%# Eval("TempKey", "javascript:downloadFile("{0}")") %>'
编辑另一种选择是使用一些代码隐藏方法,例如
href='<%# GetFileLink(Container.DataItem) %>)'
在后面的代码中
protected string GetFileLink(object dataItem)
{
return string.Format("javascript:downloadFile('{0}');",
DataBinder.Eval(dataItem, "TempKey"));
}
怎么了?
ASP.NET语法分析器混淆了嵌套的双引号。我只是意识到VS2012似乎不再发生这种情况。
如果我删除runat="server",那么就可以了。但我需要从后面的代码中处理它(在网格视图中(。
如果你的DataItem有一个类,你可以试着铸造:
<a id="link" runat="server" href="javascript:downloadFile('<%#((YourNamespace.YourClass)Container.DataItem).TempKey%>')"><%#Eval("ShortFileName") %></a>
最好的做法应该是在codeehind中设置href(这是拥有runat="server"控件的一个要点(
希望这会有所帮助,
尝试以下代码:
onclick='<%# "return jsPopup('UpdateProbAct.aspx?Table=problems&Deptid=" + Eval("department") %>'