如何从Private字段获取值到Protected字段

时间:2014-04-26 15:28:16

标签: c# asp.net webforms

在ButtonAdd_Click中设置后,我没有得到flag的正确值。该方案是当我点击ButtonAdd时,protected void ButtonAdd_Click调用private AddNewRowToGrid()来设置flag=true使用的protected void btn3_click

public partial class WebForm3 : System.Web.UI.Page
{
    bool flag = false;
    protected void Page_Load(object sender, EventArgs e)
    {
        //MyCode
    }  
    private void AddNewRowToGrid()
    {
        flag = true;
    }
    protected void ButtonAdd_Click(object sender, EventArgs e)
    {
        AddNewRowToGrid();
    }
    protected void btn3_Click(object sender, EventArgs e)
    {
        if(flag == true)
        {
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您面临的问题是,每次点击按钮都是对服务器的新回发,该回发将创建您的类的新实例以处理每个请求。

这意味着在{2}回发之间设置flag,一次单击ButtonAdd按钮,另一次单击btn3_Click按钮时无效,因为您发现自己

最简单的解决方案是将此flag存储在ViewState中(注意:要非常小心您要存储在ViewState中的内容,因为它会来回发送每个请求)

无论哪种方式,如果你改变你的代码,那么它会做你所期望的:

public partial class WebForm3: System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //MyCode
    }

    private void AddNewRowToGrid()
    {
        Flag = true;
    }

    protected void ButtonAdd_Click(object sender, EventArgs e)
    {
        AddNewRowToGrid();
    }

    protected void btn3_Click(object sender, EventArgs e)
    {
        if (Flag == true)
        {
        }
    }

    private bool Flag
    {
        get
        {
            bool? flag = ViewState["flag"] as bool?;
            return flag.HasValue ? flag.Value : false;
        }

        set
        {
            ViewState["flag"] = value;
        }
    }
}