2012-12-13 38 views
5

Vì vậy, hiện nay, trong vòng một GridView asp, tôi đã saulàm thế nào để thoát khỏi nhân vật khi sử dụng phía máy chủ delimiters

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

Những gì tôi đang chủ yếu tìm kiếm là cú pháp cho dấu ngoặc kép/hai dấu ngoặc kép để thực sự thực hiện điều này đúng cách, như những gì tôi có ở trên không làm việc đúng cách.

Trước hết, nếu tôi gói gọn toàn bộ dấu nháy đơn với dấu nháy đơn và không đặt bất kỳ dấu ngoặc kép nào bên trong, nó hoạt động cho mục đích hiển thị, nhưng khi tôi thực sự nhấp vào liên kết lúc chạy, không có gì xảy ra.

Nếu tôi đóng gói toàn bộ nội dung bằng dấu ngoặc kép, giống như hầu hết các thuộc tính của phần tử ASPX, nó không hiển thị chính xác và mọi thứ sau dấu phẩy sau câu lệnh <% # Eval%> đầu tiên hiển thị dưới dạng văn bản thực tế trên màn hình. Điều này dẫn tôi tin rằng có cần phải có một số thoát được thực hiện để ngăn chặn nó từ suy nghĩ xử lý bấm vào một nơi nào đó ở giữa rằng <% # Eval%> tuyên bố.

lưu ý rằng nếu tôi lấy đi runat = "máy chủ" và chỉ đóng gói trong ngoặc kép, điều đó có vẻ hiệu quả hơn ... nhưng tôi cần khoảng thời gian là điều khiển phía máy chủ cho rất nhiều chức năng khác tôi có trong mã của trang phía sau, nơi tôi cần phải truy cập vào kiểm soát thông qua FindControl

Trả lời

0

chức năng Eval cần hai dấu ngoặc kép, vì vậy bạn phải quấn giá trị thuộc tính trong dấu nháy đơn .

Bạn không thể kết hợp nội dung tĩnh và <%# ... %> khối trong một giá trị thuộc tính duy nhất cho điều khiển với runat="server", vì vậy bạn cần phải tạo toàn bộ chuỗi trong một khối <%# ... %>.

Trong một chuỗi trong một khối <%# ... %>, bạn có thể sử dụng &apos; để chèn một dấu nháy đơn:
EDIT Đó chỉ hoạt động trong .NET 4.0; trong 2.0, nó tạo ra &amp;apos;, sẽ không hoạt động. Sử dụng dấu nháy kép thay vì:

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

Tùy thuộc vào dữ liệu của bạn, bạn cũng có thể cần phải mã hóa các chuỗi giá trị cho JavaScript:

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

(Mã bọc cho dễ đọc - nó cần phải được trên một một dòng.)

+0

Bạn có thể nghĩ ra một sự thay thế cho JavaScriptStringEncode trong các phiên bản cũ hơn của .net. Tôi tin rằng đó là .NET 4 hoặc 4.5. Dự án này là .NET 2.0 (ngoài tầm kiểm soát của tôi) –

+0

@ScottFortier: Có mẫu cho .NET 2.0 tại đây: http://www.west-wind.com/weblog/posts/2007/Jul/14/Embedding -JavaScript-Strings-từ-một-ASPNET-Trang (Nó chỉ thiếu một trường hợp cho ''', mà nên làm theo các trường hợp khác.) –

+0

Được rồi, tùy chọn/giải pháp đầu tiên trong câu trả lời của bạn biên dịch/chạy/hiển thị chính xác nhưng giống như câu trả lời khác, không thực sự làm bất cứ điều gì khi được nhấp và cung cấp lỗi tập lệnh cho trình duyệt. Đây là những gì trông giống như thẻ theo quan điểm nguồn: Edit

0

tôi nghĩ rằng giải pháp là

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

với giải pháp này, nếu tôi nhấp vào liên kết chỉnh sửa ... không có gì xảy ra, mặc dù nó hiển thị đúng trên màn hình –

+0

Tôi sẽ thêm điều đó, khi tôi xem nguồn trên dòng mã tương ứng với liên kết này, có vẻ như tho ugh các eval đang xảy ra đúng, vì đây là những gì nguồn xem cho thấy: Chỉnh sửa mà có vẻ là những gì tôi muốn, nhưng ... nhấp vào liên kết dường như không làm cho trình duyệt làm bất cứ điều gì cả. Tôi không thể tìm ra cách định dạng nhận xét cho mã: ( –

+0

@ScottFortier: Có thể bạn sẽ thấy lỗi tập lệnh trong bảng điều khiển vì mô tả không có dấu ngoặc kép xung quanh nó. –

Các vấn đề liên quan