为什么
<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中)。
非常感谢!!
答案 0 :(得分:4)
您收到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"));
}
答案 1 :(得分:3)
在我的网格视图中,我使用了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>
同样,您可以使用<a>
href
元素
答案 2 :(得分:2)
出了什么问题?
ASP.NET解析器混淆了嵌套的双引号。 我只是意识到VS2012似乎不再发生了。
如果我删除runat =“server”,那就没问题。但我需要从后面的代码中处理它(在gridview中)。
如果你有一个DataItem类,你可以尝试转换:
<a id="link" runat="server" href="javascript:downloadFile('<%#((YourNamespace.YourClass)Container.DataItem).TempKey%>')"><%#Eval("ShortFileName") %></a>
最好的办法应该是在codebehind中设置href(这是一个拥有runat =“server”控件的点)
希望这会有所帮助,
答案 3 :(得分:1)
请尝试以下代码:
onclick='<%# "return jsPopup('UpdateProbAct.aspx?Table=problems&Deptid=" + Eval("department") %>'