UserControl中的属性:
public JobQuote quote
{
get
{
if (ViewState["Quote"] != null)
return (JobQuote)ViewState["Quote"];
else
{
JobQuote newQuote = new JobQuote();
return newQuote;
}
}
set { ViewState["Quote"] = value; }
}
在UserControl中运行代码:
protected void button_UploadFile_Click(object sender, EventArgs e)
{
if (FileUploader.HasFile)
{
try
{
quote.JobFileNames.Add(System.IO.Path.GetFileName(FileUploader.FileName));
}
catch (Exception ex)
{
label_UploadStatus.Text = "Upload status: The file could not be uploaded. <br />The following error occurred: " + ex.Message;
}
}
}
来自JobQuote.cs类的属性:
public List<string> JobFileNames
{
get
{
return JobFileNames;
}
set { JobFileNames = value; }
}
当代码尝试访问JobQuote类的JobFileNames属性时,Try块中会抛出异常。
答案 0 :(得分:1)
JobFileNames
属性的getter和setter正在引用它们,导致无限循环。当该循环耗尽可用的堆栈空间时,您将获得StackOverflowException
。
您可能需要某种属性的支持字段。要么明确......
private List<string> _jobFileNames;
public List<string> JobFileNames
{
get { return _jobFileNames; }
set { _jobFileNames = value; }
}
...或者,更好的是,自动实施......
public List<string> JobFileNames { get; set; }
答案 1 :(得分:0)
您的JobFileNames
财产正在归还。
您需要创建一个支持字段并返回该字段,或使用自动生成的属性。
答案 2 :(得分:0)
在JobQuote.cs
中,JobFileNames
指的是自己。
您无限期地对该属性进行递归。
改为使用auto-implemented properties:
public List<string> JobFileNames { get; set;}