2012-01-26 30 views
5

Tôi có một mã js trong đó một mảng hoạt động tốt khi nó giống nhưassign C# chuỗi các mảng hoặc string [] để javascript mảng

var availableTags = [ 
      "ActionScript", 
      "AppleScript", 
      "Asp", 
      "BASIC", 
      "C" 
        ]; 

tôi sau đó thực hiện một chuỗi mảng trong mã của tôi phía sau hoặc cs như vào trình độ lớp

public static string[] test={"animal","lovely"}; 

sau đó tôi thay đổi js mảng này

var availableTags = "<%=test%>"; // also tried without quotes 

Bây giờ tôi đang không có kết quả như wa s có với trước js mảng

Editing với mã hoàn tất, jquery tôi lấy từ http://jqueryui.com/demos/autocomplete/#multiple

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

using System.Collections; 
using System.Web.Script.Serialization; 

public partial class onecol : System.Web.UI.Page 
{ 
    JavaScriptSerializer serializer; 

    public static string test = "['animal','lovely']"; 
    public static string check; 


    protected void Page_Load(object sender, EventArgs e) 
    { 
     serializer = new JavaScriptSerializer(); 
     //serializer 
     this.detail.ToolsFile = "BasicTools.xml"; 
     test = returnTitle(); 
    } 

} 

và kịch bản với html là

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> 
<script type="text/javascript" src="Jscript.js"></script> 
    <script type="text/javascript" src="jquery-1.7.1.min.js"></script> 
    <script type="text/javascript" src="jquery-ui-1.8.17.custom.css"></script> 
    <link href="~/jquery-ui-1.8.17.custom.css" rel="stylesheet" type="text/css"/> 
     <script type="text/javascript"> 
      $(function() { 
       var availableTags = <%=test%>; 

       function split(val) { 
        return val.split(/,\s*/); 
       } 
       function extractLast(term) { 
        return split(term).pop(); 
       } 

       $("#tags") 
       // don't navigate away from the field on tab when selecting an item 
      .bind("keydown", function (event) { 
       if (event.keyCode === $.ui.keyCode.TAB && 
         $(this).data("autocomplete").menu.active) { 
        event.preventDefault(); 
       } 
      }) 
      .autocomplete({ 
       minLength: 0, 
       source: function (request, response) { 
        // delegate back to autocomplete, but extract the last term 
        response($.ui.autocomplete.filter(
         availableTags, extractLast(request.term))); 
       }, 
       focus: function() { 
        // prevent value inserted on focus 
        return false; 
       }, 
       select: function (event, ui) { 
        var terms = split(this.value); 
        // remove the current input 
        terms.pop(); 
        // add the selected item 
        terms.push(ui.item.value); 
        // add placeholder to get the comma-and-space at the end 
        terms.push(""); 
        this.value = terms.join(", "); 
        return false; 
       } 
      }); 
      }); 
    </script> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 

<div class="demo" > 
<div class="ui-widget"> 
    <label for="tags">Tag programming languages: </label> 
    <input id="Text1" class="#tags" size="50" /> 


</div> 
</div> 

thực sự chức năng một auto hoàn chỉnh của nó để cung cấp thẻ, đề xuất hoàn thành tự động cho gắn thẻ tôi muốn nhận được từ mã C#, tôi đã lấy nguồn Jquery từ jqueryui.com/demos/autocomplete/#multiple và sau đó tôi đã cố gắng cung cấp cho chuỗi C# từ tệp .cs, tôi đã giải thích được đặt mã với mã trên phiên bản đã chỉnh sửa, với mã C# phía sau nó hoạt động chính xác như trong liên kết

+2

có thể trùng lặp của [Vượt qua mảng C# ASP.NET thành mảng Javascript] (http://stackoverflow.com/questions/3464498/pass-c-sha rp-asp-net-mảng-tới-javascript-mảng) –

+0

@TimSchmelter đã chỉnh sửa, vui lòng kiểm tra – user1074474

Trả lời

21

Bạn cần tuần tự hóa mảng chuỗi C# vào một mảng javascript.

http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

Thông thường tôi tạo một lớp tĩnh đơn giản làm trình bao bọc.

public static class JavaScript 
{ 
    public static string Serialize(object o) 
    {    
     JavaScriptSerializer js = new JavaScriptSerializer(); 
     return js.Serialize(o); 
    } 
} 

Sau đó, bạn có thể sử dụng lớp đó để serialize mục bạn cần phải

//C# Array(Member of asp page) 
protected string[] Values = { "Sweet", "Awesome", "Cool" }; 

<script type="text/javascript"> 
    var testArray = <%=JavaScript.Serialize(this.Values) %> 
</script> 
+1

+1 cho serialization –

+0

vì vậy whats bước tiếp theo? – user1074474

+0

Tôi sẽ chỉnh sửa câu hỏi với mã nguồn đầy đủ ngay bây giờ – user1074474

1

test thuộc tính phải là thuộc tính chuỗi và sẽ hiển thị chuỗi sẽ được phân tích cú pháp bằng công cụ Js làm mảng. Thử cái này.

Mã đằng sau tài sản

public static string test= "['animal','usman lovely']"; 

JS

var availableTags = <%=test%>;//No quotes 
+0

Tôi đã thử mà không báo giá – user1074474

+0

@ user1074474 - Kiểm tra mã đằng sau các thay đổi về tài sản. – ShankarSangoli

+0

Có lẽ nên thả các dấu ngoặc nhọn và xác định nó là 'chuỗi'. –

3

Nó sẽ là một cái gì đó như thế này ...

var availableTags = ["<%= string.Join("\", \"", test) %>"]; 

hoặc

var availableTags = ['<%= string.Join("', '", test) %>']; 

Người đầu tiên sẽ trả lại như

var availableTags = ["Sweet", "Awesome", "Cool"]; 

và điều thứ hai sẽ trả lại như

var availableTags = ['Sweet', 'Awesome', 'Cool']; 

cả hai đều là tốt cho autocomplete.

+0

Tôi đã thử biến đó có/không có dấu ngoặc kép/[] và với '', nhưng vẫn không hoạt động – user1074474

+0

@ user1074474, Ý của bạn là gì khi "không hoạt động"? Hiển thị cho chúng tôi lỗi hoặc HTML được hiển thị (xem nguồn). –

+0

Tôi sẽ chỉnh sửa câu hỏi với mã nguồn đầy đủ ngay bây giờ – user1074474

6
var availableTags = ['<%=String.join("','",test)%>']; 
+0

Cần lưu ý rằng nếu bất kỳ chuỗi nào của bạn có chứa một trích dẫn thì chúng sẽ được thoát. –

+0

Thông báo lỗi trình biên dịch: CS0117: 'Chuỗi' không chứa định nghĩa cho 'tham gia' – user1074474

+0

được chỉnh sửa, vui lòng kiểm tra – user1074474

0

chỉ sử dụng chỉ số để có được chuỗi mảng thử nghiệm của bạn tôi đã thử bằng cách cho chỉ số như

var availableTags = "<%=test[0]%>"; // animal 
var availableTags = "<%=test[1]%>"; // lovely 
Các vấn đề liên quan