2

現在、値を次のようにハードコーディングできるJavascript関数があります-

data: [1,4,7,9]

ただし、整数リストを渡して、コードの背後にある値を次のように設定したいと思います-

C# コード ビハインド

public List<int> listOfInts = new List<int>();

protected void Button1_Click(object sender, EventArgs e)
    {
        listOfInts.Add(1);
        listOfInts.Add(4);
        listOfInts.Add(7);
        listOfInts.Add(9);

        ScriptManager.RegisterStartupScript(this, GetType(), "blah", "JSfunction()", true);
    }

Aspx

data: <% = listOfInts %>

ただし、これはエラーで壊れます-

0x800a1391 - Microsoft JScript runtime error: 'JSfunction' is undefined

前述の行を削除して、関数でこのようにする場合 (必要なようにコード ビハインドから何も渡さない) -

var listOfInts = new Array(); 
listOfInts[0] = 1;
listOfInts[1] = 2; 
listOfInts[2] = 3; 
listOfInts[3] = 4;

そして設定します-

data: [listOfInts[0],listOfInts[1],listOfInts[2],listOfInts[3]]

これはうまくいきます。コード ビハインドから値を渡して Javascript 関数に値を入力するにはどうすればよいですか?

4

2 に答える 2

3

listOfInts を JavaScript 配列としてフォーマットする必要があります。次のように、コード ビハインドにプロパティを追加してみてください。

protected string IntsAsJSArray
{   
    get 
    {
        return string.Format("[{0}]", string.Join(",", listOfInts));
    }
}

次に、ASPX ページで

data: <%= IntsAsJSArray %>
于 2013-10-25T15:30:05.633 に答える
2

これを行うためのより一般的な方法...そして私の意見では、これを行う必要があるオブジェクトに対して機能するものを作成する方がはるかに優れています。次の拡張メソッドを検討してください...

    public static T FromJson<T>(this string jsonData, Encoding encoding = null) 
        where T : class
    {
        encoding = encoding ?? Encoding.Default;
        var deserializer = new DataContractJsonSerializer(typeof(T));
        var buffer = encoding.GetBytes(jsonData);
        using (var stream = new MemoryStream(buffer))
        {
            return deserializer.ReadObject(stream) as T;
        }
    }

    public static string ToJson<T>(this T obj, Encoding encoding = null) 
        where T : class
    {
        encoding = encoding ?? Encoding.Default;
        var serializer = new DataContractJsonSerializer(typeof(T));
        using (var stream = new MemoryStream())
        {
            serializer.WriteObject(stream, obj);
            return encoding.GetString(stream.ToArray());
        }
    }

あなたの場合、使用法は次のようになります...

data: <% = listOfInts.ToJson() %> 

これは、asp.net側にList、Int []、またはその他のオブジェクトがあるかどうかに関係なく機能します。また、JSON テキストのエンコーディングを考慮することも忘れないでください。

于 2013-10-25T16:26:02.610 に答える