0

我在尝试将地址的地理位置保存到文件时遇到问题。我正在使用隐藏标签来传输信息。

在客户端按钮事件上,我有:

   function save() {
        document.getElementById("hidLat").value = y;
        document.getElementById("hidLon").value = x;
        <% saveAddress s = save(); %>
   }

在 c# 中我有:

   protected saveAddress save()
   {
        saveAddress s = new saveAddress();
        s.latitude = hidLat.Value;
        s.longitude = hidLon.Value;

        using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\\savedAddresses.txt", true))
        {
            file.WriteLine(s.latitude + " " + s.longitude);
            file.Close();
        }  

        return s;
   }

当我单击按钮时,文件已创建,但没有保存任何内容。我这样做是对的还是有更好的方法来尝试将用户输入写入文件?

4

4 回答 4

0

您确定设置了纬度和经度变量吗?尝试先打印出来.. 代码似乎没问题

于 2012-11-08T16:33:04.877 回答
0

我认为您对网络生命周期感到困惑。在您的特定情况下,这就是正在发生的事情:

  1. 您的页面被请求,并且 ASP.NET 运行时在后面加载您的代码并尝试执行该页面。
  2. 在执行页面的过程中,ASPX 包含要调用的代码

     saveAddress s = save()
    

    通过这种方式,该方法甚至在页面被渲染回客户端之前被调用。

  3. 当页面最终发送到客户端时,您有一些客户端代码调用function save().

我猜您希望在 javascript 函数运行后调用该服务器端方法。你有两个选择:

  1. 完整的 PostBack - 您将表单发布回服务器,您的 ASPX 代码后面可以有一些代码来检查Page.IsPostBack并尝试调用您的服务器端方法。
  2. Ajax - 您可以向站点上的特定处理程序发出 ajax 请求,然后调用服务器端save方法。
于 2012-11-08T16:35:34.957 回答
0

您似乎对在服务器和客户端代码之间传输值感到困惑。看到标记会很有用。我假设您正在使用网络表单<asp:Label />控件。为了将值传输到服务器,您需要发布一个表格或制作一个XMLHttpRequest.还有其他方法,但我们现在只使用这两种方法。

还要记住,如果这些标签是服务器控件,它们的值将存储在视图状态中。用 javascript 修改值不会影响视图状态。我建议将值存储在隐藏的表单输入字段中。将您的保存逻辑添加到保存OnClick服务器端。

于 2012-11-08T16:41:06.733 回答
0

评论

你不想使用

file.Close();

当您使用“使用(){}”时

于 2012-11-08T17:02:36.903 回答