将变量传递给用户控件

时间:2012-02-10 14:45:19

标签: asp.net user-controls

我创建了一个用户控件,用于级联两个下拉列表“省”和“城市”。但每当我运行它时,错误消息说“发生了'System.StackOverflowException'类型的未处理异常” 这是我的用户控制代码

public partial class cascadingdropdownlist : System.Web.UI.UserControl
{
    public string province_selectedvalue
    {

        set
        {
            string province_selectedvalue = value;
        }
        get
        {
            return city_selectedvalue;
        }
    }

    public string city_selectedvalue
    {
        set
        {
            string city_selectedvalue = value;
        }
        get
        {
            return city_selectedvalue;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        string a = province_selectedvalue;
        ............
    }

}

在主页

<uc1:cascadingdropdownlist ID="province_city" runat="server" OnPreLoad="province_city_OnPreLoad"/>

背后的代码是

protected void province_city_OnPreLoad(object sender, EventArgs e)
    {
        province_city.province_selectedvalue = myReader["Province/State"].ToString();
        province_city.city_selectedvalue = myReader["City"].ToString();
    }

调用用户控件时发生错误:province_selectedvalue.get方法。为什么我不明白为什么?任何人都可以帮助我,非常感谢

2 个答案:

答案 0 :(得分:2)

问题出在您的财产中:

public string city_selectedvalue 
{ 
    set 
    { 
        string city_selectedvalue = value; 
    } 

一遍又一遍地调用city_selectedvalue上的setter(或getter!),导致堆栈溢出。

用此

替换您的财产
public string city_selectedvalue { get; set; }

我还认为你可以用province_selectedvalue做同样的事情,但它的getter引用city_selectedvalue - 这是正确的吗?

答案 1 :(得分:0)

您收到该错误,因为代码处于不定式循环中。当你调用province_selectedvalue.get时,你正在调用city_selectedvalue get。并且您认为您正在调用的变量中的属性具有相同的名称,因此它反复调用相同的内容。

将代码更改为

public string city_selectedvalue { get; set; }

并且

public string province_selectedvalue { get; set; }