Ошибка строкового преобразования JSON в аргументе события Silverlight - PullRequest
0 голосов
/ 20 июня 2009

У меня есть следующий код Silverlight:

[ScriptableType]
public partial class Page : UserControl
{
    [ScriptableMember]
    public event EventHandler<UploadChangedEventArgs> OnFileProgressChanged;

    private void FileProgressChanged_Click(object sender,RoutedEventArgs e)
    {   // test reasons only
        OnFileProgressChanged(null, new UploadChangedEventArgs()
        {
            Id = Guid.NewGuid(),
            Sent = 12345,
            Started = DateTime.Now
        });
    }
}

Аргументы события имеют такую ​​структуру:

[ScriptableType]
public class UploadChangedEventArgs : EventArgs
{
    public Guid Id { get; set; }
    public long Sent { get; set; }
    public DateTime Started { get; set; }
}

Со стороны Javascript я написал обратный вызов события (и он запускается):

function onFileUploadProgressChanged(sender, e) {
    alert(JSON.stringify(e)); // shows "{}"
    alert(e.Sent);            // shows "12345"
}

Мне нужно систематизировать эти данные, чтобы отправить их через событие обратной передачи. Что не так?

Ответы [ 2 ]

0 голосов
/ 24 июля 2009

Я закончил с кодом ниже; он похож на код Михаэля, но безопаснее, потому что не должен иметь дело с escape-последовательностями символов.

function onFileListChanged(sender, e) {
  var files = [];
  for (var i = 0; i < e.Files.length; i++) {
      files[i] = {
           Id    : e.Files[i].Id, 
           Name  : e.Files[i].Name,
           Size  : e.Files[i].Size
      };
  }
  __doPostBack(
        "<%= RadGrid1.UniqueID %>", 
        "OnFileListChanged:" + JSON.stringify(files));
  }
0 голосов
/ 20 июня 2009

Глядя на ваш код, вам, вероятно, понадобится явно получить свойства (Id, Sent, Started) и создать строку JSON самостоятельно.

function onFileUploadProgressChanged(sender, e) 
{    
    var json = "{\""Id\":\"" + e.Id + 
        "\", Sent:" + e.Sent + 
        ", \"Started\":\" + e.Started + "\"}";
}

Кроме того, вы можете добавить свойство в UploadChangedEventArgs, чтобы получить JSON (используя класс JsonObject Silverlight или реализовать метод UploadChangedEventArgs.ToString () для возврата свойства JSON:

using System.Json;

class UploadChangedEventArgs : EventArgs
{
   public string JSON
   {
       get
       {
            var json = new JsonObject();

            json.Add("Id", this.Id);
            json.Add("Sent", this.Sent);
            json.Add("Started", this.Started);

            return json.ToString();
       }
   }
}
...