System.Web.UI.Page的Partial类中的非静态属性在函数中重置

时间:2012-09-22 08:31:34

标签: c# .net web-applications

部分类_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?
    }

}

2 个答案:

答案 0 :(得分:2)

  

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

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

答案 1 :(得分: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控件名称 hfValueToConvert & hfConvertedValue 到您的aspx页面。