0

部分类 _Default 中的变量在函数调用中被重置,如下面的代码中所述。但是,在将属性标记为静态时,它们的值将被保留。

我的问题是,为什么会发生这种情况?每个函数调用不是使用相同的页面类实例吗?

public partial class _Default : System.Web.UI.Page
{
    public double ValueToConvert { get; set; }
    public double ConvertedValue { get; set; }

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

    protected void btnUC_Click(object sender, EventArgs e)
    {
        //In this method, the non-static properties ValueToConvert and ConvertedValue
        //get reset. But why?
    }

}
4

2 回答 2

2

每个函数调用不是使用相同的页面类实例吗?

那么每个请求都会创建一个新的类实例。哎呀,他们可能在不同的进程甚至不同的机器上。如果您在同一个请求中有多个方法调用将使用同一个实例,否则您需要确定您希望如何传播状态。您可以通过客户端(视图状态)传播它或将其存储在服务器端的某个地方(例如,在数据库中)。

于 2012-09-22T08:34:54.610 回答
0

你可以通过使用隐藏字段并用这样的属性包装它们来解决这个问题

public partial class _Default : System.Web.UI.Page
{
    public double ValueToConvert \
    { 
       get{
           return hfValueToConvert.Value;  
       }
       set{
           hfValueToConvert.Value = this.value.ToString();
       }
    }

    public double ConvertedValue
    { 
       get{
           return hfConvertedValue.Value;  
       }
       set{
           hfConvertedValue.Value = this.value.ToString();
       }
    }

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

    protected void btnUC_Click(object sender, EventArgs e)
    {
        //In this method, the non-static properties ValueToConvert and ConvertedValue
        //get reset. But why?
    }

}

现在将两个 HiddenField 控件名称hfValueToConverthfConvertedValue 添加到您的 aspx 页面。

于 2012-09-22T09:03:15.247 回答