为什么这个静态c#变量没有变化?

时间:2015-02-09 23:21:26

标签: c# asp.net

我在受保护的类中有几个C#变量,用于存储在HTML画布上单击的最后一个坐标,并且调用该方法时变量不会更改:

public partial class Default : Page {

    public static int xVar {get; set;}
    public static int yVar {get; set;}

    protected void Page_Load(object sender, EventArgs e) {
    }

    protected string getDate() {
        return Convert.ToString(DateTime.Now.Year); 
    }

    [WebMethod]
    protected void InsertPoints(int x, int y) {
        xVar = x;
        yVar = y;
        //SQL Connect stuff and other code that works
    }
}

从aspx页面调用该方法,它会调用它。问题是它将变量初始化为零,无论我在Canvas中单击的位置如何,它们都保持这种状态。事实上,当有一个SQL插入时,它会插入正确的整数(x和y),但是我无法更改静态变量。 感谢。

1 个答案:

答案 0 :(得分:0)

好吧,我会猜测我在评论中学到了什么。

我认为您在解决问题时使用的工作流程中存在错误。

发生了什么,而且你的电话是否是你所期望与否的,是你的:

  1. 抓住第一页
  2. 点击您的画布,它会触发Web请求以更新静态属性。
  3. 期望使用新的alert值更新xCoord来电。
  4. 此处的关键是评估<%=...%>的位置。当你第一次拉页面时,会发生对该表达式的评估,直到你发出另一个请求才会再次调用它。

    换句话说,alert('<%= xCoord %>')在页面加载时在服务器端进行评估,浏览器得到最终的alert('0'),而不是原始静态变量的一些神奇链接。

    快速检查是刷新页面。如果你:

    1. 点击画布
    2. 刷新页面,然后
    3. 再次点击画布,
    4. 应该正确更新。

      你能够实现它想要的功能的唯一方法是使用你推送到web方法的值,这只能在原始浏览器窗口上工作,或者使用类似的库SignalR处理所有连接浏览器的数据实时下推。

      如果我误解了您的设置,或者我是否可以澄清其中的任何内容,请告诉我。同样,我的理解主要只是你在评论中所说的内容的推论。我知道这是正确的,但您需要确认它是否与相关。


      包括我在内的一些人在评论中提到了这一点,但我也会在这里说。根据我自己的评论,

        

      小心使用ASP中的静态内容。您可能遇到一些线程问题,以及静态字段或属性的多个实例。它变得凌乱。只有在数据可能过时时才使用静态。

相关问题