1

コードビハインドで作成した詳細を含むリストを表示しようとしています。しかし、コンソールで未定義になっています。なぜそれが起こるのですか?

cs:

public partial class WebForm1 : System.Web.UI.Page
{
    public List<Person> persons { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        Person p1 = new Person() { name = "Tom" };
        Person p2 = new Person() { name = "Ed" };
        List<Person> lijst = new List<Person>();
        lijst.Add(p1);
        lijst.Add(p2);
        persons = lijst;
    }
}

public class Person
{
    public string name { get; set; }
}

aspx:

<script>
    var persons = '<%= persons%>'
    var length = persons.length;

    for (var i = 0; i < length; i++) {
        person = persons[i];

        console.log(person.name);
    }
</script>
4

2 に答える 2

1

問題は、JavaScript が C# クラスとそのプロパティについて認識していないことです。文字列、xml、json などの既知の型に変換またはシリアル化する必要がある場合があります。

以下のようなものを試してください

クラスプロパティからカンマ区切りの人物名を返すメソッドを持つことができます

    public string GetPersonNames
    {
        get
        {
            return string.Join(",", persons.Select(p => p.name));
        }
    }

あなたのaspxでは、人の名前を取得して分割することができます'

<script>
        var persons = '<%= GetPersonNames%>';
</script>

または、以下を試してください

<script type="text/javascript">
    var persons = '<%= new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(persons)%>';
    persons = JSON.parse(persons);
    var length = persons.length;
    alert(length);
    for (var i = 0; i < length; i++) {
        var person = persons[i];
        alert(person.name);
    }
</script>
于 2013-06-14T03:22:45.590 に答える
0

これを試して、.csでコーディングしてください

 Person p1 = new Person() { name = "Tom" };
        Person p2 = new Person() { name = "Ed" };
        List<Person> lijst = new List<Person>();
        lijst.Add(p1);
        lijst.Add(p2);
        persons = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(lijst);

aspx の JavaScript

var persons = eval('<%= persons%>');
    //this will show "Tom"
    alert(persons[0].name);
于 2013-06-14T03:14:21.397 に答える