0

I'm novice in jquery and I have one problem: I have two .aspx files: one of them contain script

<script type ="text/javascript">
    $(document).ready(function () {
        var schemaName = GetURLParameters('schemaName');
        var key = GetURLParameters('key');
        $.post("dataloader.aspx", {
            name: schemaName,
            key: key
        });
    });
</script>

which send parameters to other page, "dataloader.aspx". Here is "dataloader.aspx.cs" code:

protected void Page_Load(object sender, EventArgs e)
        {
            Response.ContentType = "application/json";
            var schemaName = Request.Form["name"];
            var key = Request.Form["key"];

            Loader loader = ConnectionManager.getLoader();
            Dictionary<string, string> name_value = new Dictionary<string, string>();
            if (!string.IsNullOrEmpty(schemaName))
            {
                var schema = loader.GetSchema(schemaName);
                var qcontext = new SimpleLoader.BOService.QueryContext();
                qcontext.InitQueryContext();

                var element = loader.GetObjectByKey(schema, key);
                var viselems = element._Schema.GetVisibleElems(); 
                var cardElems = viselems.Where(x => !(x is SchemaElemDetail)).ToList();

                foreach (var elem in cardElems)
                {
                    var value = (element.GetValue(elem.Name) ?? "").ToString();
                    if (!string.IsNullOrEmpty(value))
                    {
                        name_value.Add(elem.Name, value);
                    }
                }
                Response.Write(name_value);
                Response.Flush();
                Response.End();
            }

        }

As you can see, I,m adding some data to dictionary. I want to send this dictionary to "clientcard.aspx" client side by jQuery, but i don't know how...Can you help me?? I'll be very grateful.

4

3 回答 3

2

一种方法是在dataloader.aspx. 假设您的函数名称是getNameValue,在您的 aspx 页面中,您将有一个这样的 webmethod:(您基本上将代码从Page_Load事件传输到此)

[System.Web.Services.WebMethod]
public static Dictionary<string, string> getNameValue(string name, string keyN) 
{
  var schemaName = name;
  var key = keyN;

  Loader loader = ConnectionManager.getLoader();
  Dictionary<string, string> name_value = new Dictionary<string, string>();
  if (!string.IsNullOrEmpty(schemaName))
  {
    var schema = loader.GetSchema(schemaName);
    var qcontext = new SimpleLoader.BOService.QueryContext();
    qcontext.InitQueryContext();

    var element = loader.GetObjectByKey(schema, key);
    var viselems = element._Schema.GetVisibleElems(); 
    var cardElems = viselems.Where(x => !(x is SchemaElemDetail)).ToList();

    foreach (var elem in cardElems)
    {
      var value = (element.GetValue(elem.Name) ?? "").ToString();
      if (!string.IsNullOrEmpty(value))
      {
         name_value.Add(elem.Name, value);
      }
    }    
  }
  return name_value; //will be automatically serialised to JSON because of the dataType specification in ajax call.
}

你可以ready像这样在 jQuery 中调用这个函数:

  $(document).ready(function () {
        var schemaName = GetURLParameters('schemaName');
        var key = GetURLParameters('key');
        //just in case
        var data = JSON.stringify({
            name: schemaName,
            keyN: key
        });

        $.ajax({
            type: "POST",
            url: "dataloader.aspx/getNameValue",
            data: data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            error: function (xhr, status, error) {
                var msg = JSON.parse(xhr.responseText);
                alert(msg.Message);
            }
          }).done(function (msg) {
            //msg.d will contain your dictionary
          });
  });

使用这种方法更好的原因是代码变得可重用。在您当前的设置中,如果您想获取name_value字典,则必须重新加载 aspx 页面。现在你需要做的就是调用这个方法。

希望这可以帮助!

于 2013-07-25T15:41:30.690 回答
0

最好从 DataLoader.aspx 页面转换为 JSON。然后,在上面的代码段中添加一个回调:

  $.post("dataloader.aspx", {
        name: schemaName,
        key: key,
        success: function(d) { .. }
  });

变量“d”包含响应,可能是字符串。然后,您可以以相同的方式使用 JQuery 将数据发送到下一页,方法是使用 JSON.parse 并解析内容,或者直接传递 JSON。

于 2013-07-25T15:34:22.200 回答
0

为了创建你想要的 JSON,你需要序列化你的字典。您可以使用System.Web.Script.Serialization.JavaScriptSerializer

var JSSerializer = new JavaScriptSerializer();
Response.Write(JSSerializer.Serialize(name_value));

然后在你的 JS 代码中:

$(document).ready(function () {
        var schemaName = GetURLParameters('schemaName');
        var key = GetURLParameters('key');
        $.post("dataloader.aspx", {
            name: schemaName,
            key: key
        }, function(data){
        //Here is your success callback and data should be your JSON.
        });
    });

为了使这个更简洁,您可能需要考虑使用 HTTP 处理程序模板 ( .ashx) 而不是.aspx页面,这样您就不会拥有页面的所有aspx开销(即代码隐藏和视图)。

于 2013-07-25T15:40:49.837 回答