服务器标记的格式不适合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",那么它是可以的。但我需要从后面的代码中处理它(在网格视图中(。

非常感谢!!

服务器标记的格式不适合Gridview中的锚点标记

在我的网格视图中,我使用了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(&quot;<%#Eval("TempKey") %>&quot;)'

编辑上面似乎没有对数据绑定表达式进行求值。请尝试以下使用Eval重载格式化的表达式

href='<%# Eval("TempKey", "javascript:downloadFile(&quot;{0}&quot;)") %>'

编辑另一种选择是使用一些代码隐藏方法,例如

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") %>'