【问题标题】:How to access JavaScript objects in code behind (C#/ASP.NET)如何在后面的代码中访问 JavaScript 对象 (C#/ASP.NET)
【发布时间】:2010-10-15 13:11:27
【问题描述】:

我正在使用 web kit 浏览器本地数据库来临时存储一些数据,当我想访问它时我创建一个对象

function patientSelectHandler(transaction, results) {
        var row = results.rows.item(0);
        var patient = new Object();

        patient.name = row['name']
        patient.dob = row['dob']
        patient.gender = row['gender']
}

有没有办法从后面的代码中访问这个对象,而不必填充文本字段/标签/下拉菜单然后从那里获取值?

现在的例子:

function patientSelectHandler(transaction, results) {
        var row = results.rows.item(0);
        var patient = new Object();

        patient.name = row['name']
        patient.dob = row['dob']
        patient.gender = row['gender']


        $('#txtPatientName').val(patient.name);
        $('#txtDOB').val(patient.dob);
    $('#ddlGender').val(patient.gender);
}

编辑:

稍微更新一下我的例子:

    var patientString = JSON.stringify(patient);
    var inputField = $("<input type='text' name='hiddenField" + i + "' id='hiddenField" + i + "'></input>");
    $('#Patients').append(inputField);
    $('#hiddenField' + i).val(patientString);

然后在后面的代码中循环

            for (int i = 0; i <= count; i++)
            {
                string n = String.Format("{0}", Request.Form["hiddenField" + i]).ToString();
                JObject o = JObject.Parse(n);
                string name = (string)o["name"];
//now I can get all values into variables and use them when calling the web service
}

【问题讨论】:

    标签: c# javascript html


    【解决方案1】:

    您无需出于任何原因将其设置为文本字段...

    我可能会做类似的事情

    var patientString = JSON.stringify(patient);
    $('#myHiddenInput').val(patientString);
    

    否则,根据应用程序的流程,您可以使用 AJAX 将该对象以字符串形式发布到服务器。

    然后,您将不得不使用一种方法将该字符串解析回对象形式。我对 c# 不太熟悉,但我相信找到或编写这样的方法会很容易。

    【讨论】:

    • 由于我有很多行,是否可以为每一行创建一个新的隐藏文本字段,将 id 设置为#hiddenInput 和行号 (i),然后将值设置为 patientString?如果是我想我必须点击一个按钮“获取所有客户”,然后点击另一个“同步”来做我想做的事?
    • 所以我用 var patientString = JSON.stringify(patient); var inputField = $("").attr('id', "hiddenField" + i); $('#Patients').append(inputField); $('#hiddenField' + i).val(patientString);
    • 抱歉...我没有看到您的回复。那你搞定了吗?这样听起来会很好。另一种选择是遍历所有行并将每个患者对象附加到存储所有患者的另一个对象。然后你可以对该对象进行字符串化并将其设置为输入......但不管怎样都有效:-)
    【解决方案2】:

    如果您有许多字段要发送,您可以对所有内容进行 JSON 编码并将其放入单个多行文本字段 (textarea)。然后你就可以在服务器上轻松解码了。

    【讨论】:

    • 我有大约 50 个元素在其中输入数据,现在我将其插入远程数据库并且它正在工作。但是,如果我假设浏览器数据库中有 10 行,我必须填充字段,单击保存,填充字段,单击保存等等。如果可能的话,我希望将本地数据库中的所有行一键发送到服务器。
    【解决方案3】:

    记住——

    1. 当您的服务器代码运行时,它会构建一个页面对象,然后使用该对象生成 html 以发送到浏览器。一旦生成了 html,该页面对象就会被销毁。当浏览器显示您的页面时,您的服务器资源已经不存在了。
    2. 当浏览器提交一个页面请求时,它会破坏它所显示的任何页面的 DOM。所以当你的服务器启动时,你的 javascript 已经不存在了。

    因此,这两个系统通常是完全独立的。您可以通过在客户端和服务器之间传递 ajax json 消息来解决此问题。

    【讨论】:

      【解决方案4】:

      我会使用 AJAX 发布将您的 JSON 对象存储在服务器上。

      var str = JSON.stringify(...);
      
      $.ajax({
      
          type: "POST",
      
          contentType: "application/json; charset=utf-8",
      
          url: "Default.aspx/validate",
      
          data: str,
      
          error: function(XMLHttpRequest, textStatus, errorThrown) {
      
              ...
          },
      
          success: ajaxCallback,
      
          dataType: "json"
      
      });
      

      在服务器上

      [WebMethod]
      public static string validate(Dictionary<string, object> patient)
      {
          ...
          //return your JSON response
      }
      

      然后只需遍历服务器上的 Dictionary 对象(键 - 对象参数,值 - 它的值)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-15
        • 2016-01-29
        • 2014-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-17
        • 2011-02-20
        相关资源
        最近更新 更多