2013-01-21 57 views
2

形成錨標記爲什麼服務器標籤沒有很好的GridView

<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中)。

非常感謝!

回答

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(&quot;<%#Eval("TempKey") %>&quot;)' 

編輯 看來,數據綁定表達式沒有在上面得到評估。請嘗試以下其使用Eval過載用於格式化

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

EDIT表達 另一種替代方案是使用一些代碼隱藏方法 - 例如,

href='<%# GetFileLink(Container.DataItem) %>)' 

而在代碼隱藏

protected string GetFileLink(object dataItem) 
{ 
    return string.Format("javascript:downloadFile('{0}');", 
      DataBinder.Eval(dataItem, "TempKey")); 
} 
+0

是否需要將變量連接到字符串? – Vogel612

+0

@ Vogel612,不明白 - 'Eval'表達式是一個服務器端代碼,可以替換java腳本字符串中的字符 - 你應該在哪裏連接? – VinayC

+0

@VinayC - >現在錯誤已解決。但它不能正確顯示。 這是我的代碼。 ** ** <%#Eval("ShortFileName") %> 但它顯示像** 「)」 ID = 「ctl00_PlaceHolderMain_ctl00_gvAttachment_ctl02_link」> aaa.docx ** 應該只顯示** ** aaa.docx – kevin

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> 

同樣可以在href

+0

感謝您的建議。但是當我實現它時,我需要點擊兩次。 – kevin

+0

需要點擊兩次?你可以粘貼你的更新代碼 – sharad

+0

'' 我從GenerateURL方法內部的代碼中傳遞url。 'protected string GenerateURL(string tempKey) { return ResolveUrl(「〜// Common/Downloader.ashx」)+「?Key =」+ tempKey.ToString(); }' – kevin

2

什麼是錯的,你做<a>元素?

ASP.NET分析器使用嵌套雙引號混淆。 我剛剛意識到它似乎不再與VS2012發生了。

如果我刪除runat =「server」,那麼它是可以的。但是我需要從後面的代碼中處理它(它在一個gridview中)。

如果你有你的DataItem的一類,你可以只嘗試鑄造:

<a id="link" runat="server" href="javascript:downloadFile('<%#((YourNamespace.YourClass)Container.DataItem).TempKey%>')"><%#Eval("ShortFileName") %></a> 

最好做應該設置在代碼隱藏在href(這是具有RUNAT點東西= 「服務器」 控制)

希望這將幫助,

1

嘗試下面的代碼:

onclick='<%# "return jsPopup('UpdateProbAct.aspx?Table=problems&Deptid=" + Eval("department") %>' 
+0

對不起,你能解釋一下嗎? – kevin

相關問題