2012-12-13 9 views
5

Tak, obecnie w ramach GridView asp, mam następującyjak uciec znaków przy użyciu stronie serwera ograniczniki

<span id="btnEdit" runat="server" onclick="ShowEditCriteriaFilterDialog('<%#Eval("intSMCID")%>', '<%#Eval("strDescription")%>')" class="linkText">Edit</span> 

Co mam w zasadzie szukasz jest składnia cytaty/podwójnego notowania faktycznie dokonaj tego prawidłowo, ponieważ to, co mam powyżej, nie działa poprawnie.

Po pierwsze, jeśli enkapsuluję cały onclick z pojedynczymi cudzysłowami, a nie umieszczam żadnych innych cudzysłowów w środku, działa on w celu renderowania, ale kiedy klikam łącze w czasie wykonywania, nic się nie dzieje.

Gdybym upakować całą onclick z podwójnymi cudzysłowami, jak większość właściwości elementu ASPX, nie wyświetla się poprawnie, a wszystko po przecinku, która jest po pierwszym <% # Eval%> sprawozdanie przedstawia się jako rzeczywisty tekst na ekranie. Prowadzi mnie to do przekonania, że ​​należy wykonać pewne operacje ucieczki, aby zapobiec myśleniu, że program obsługi klikania kończy się gdzieś w środku tej instrukcji.

Zauważ, że jeśli zabiorę runat = "serwer" i po prostu zamknę go w podwójnych cudzysłowach, to wydaje się, że działa lepiej ... ale potrzebuję tego zakresu, aby był kontrolerem po stronie serwera dla wielu innych funkcji. mają w kodzie strony jest za którym muszę przejść kontrolę poprzez FindControl

Odpowiedz

0

funkcja Eval potrzebuje podwójnych cudzysłowów, więc trzeba owinąć wartość atrybutu w apostrofach .

Nie można mieszać zawartość statyczną i <%# ... %> bloków w jednym wartości nieruchomości dla sterowania z runat="server", więc trzeba zbudować cały ciąg w obrębie jednego <%# ... %> bloku.

ciągu znaków w <%# ... %> bloku, można użyć &apos; wstawić pojedynczy cytat:
EDIT To działa tylko w .NET 4.0; w wersji 2.0 generuje &amp;apos;, która nie będzie działać. Użyj cudzysłowia zamiast:

onclick='<%# string.Format(
    "ShowEditCriteriaFilterDialog(\"{0}\", \"{1}\")", 
    Eval("intSMCID"), Eval("strDescription")) %>' 

zależności od danych, można też trzeba zakodować ciąg znaków do JavaScript:

onclick='<%# string.Format(
    "ShowEditCriteriaFilterDialog(\"{0}\", \"{1}\")", 
    Eval("intSMCID"), 
    HttpUtility.JavaScriptStringEncode(Eval("strDescription", "{0}"))) %>' 

(Code zawinięte dla czytelności - to musi być na pojedyncza linia).

+0

Czy możesz wymyślić zamiennik JavaScriptStringEncode, który jest w starszych wersjach .net. Uważam, że jest to .NET 4 lub 4.5. Ten projekt to .NET 2.0 (poza kontrolą). –

+0

@ScottFortier: Tutaj jest przykład dla .NET 2.0: http://www.west-wind.com/weblog/posts/2007/Jul/14/Embedding -JavaScript-Strings-from-an-ASPNET-Page (Brakuje tylko przypadku dla '' ', co powinno być zgodne z innymi przypadkami.) –

+0

W porządku, pierwsza opcja/rozwiązanie w odpowiedzi kompiluje/uruchamia/wyświetla poprawnie, ale podoba inna odpowiedź, w rzeczywistości nic nie robi po kliknięciu i dostarcza błąd skryptu do przeglądarki. To właśnie tag wygląda w widoku źródła: Edytuj

0

Myślę, że rozwiązaniem jest

onclick='<%# "ShowEditCriteriaFilterDialog(" +Eval("intSMCID") + ","+ Eval("strDescription") +");" %>' 
+0

z tego rozwiązania, jeśli klikam odnośnik edytuj ... nic się nie dzieje, mimo że jest poprawnie wyświetlana na ekranie –

+0

dodam, że z tego, kiedy zobaczyć źródło na linii kodu odpowiadającego ten link, wygląda na to eval dzieje się prawidłowo, ponieważ to pokazuje źródło widoku: Edytuj co wydaje się być tym co chcesz, ale jednak ... kliknięcie linku nie powoduje, że przeglądarka robi cokolwiek. Nie mogę wymyślić, jak sformatować komentarze do kodu :( –

+0

@ScottFortier: Prawdopodobnie zobaczysz błąd skryptu w konsoli, ponieważ opis nie zawiera cytatów. –

Powiązane problemy