Переменная члена управления веб-пользователем недоступна, если она не объявлена как статическая
Я создаю пользовательский веб-элемент управления, используя C# для воспроизведения некоторых WAV-файлов на сервере. Ниже мой код.
public partial class WaveFilePlayer : System.Web.UI.UserControl
{
//private string[] files;
private static string[] files;
protected void ButtonLoad_Click(object sender, EventArgs e)
{
string resourcePath = ConfigurationManager.AppSettings["ResourcePath"];
string searchPattern = ConfigurationManager.AppSettings["SearchPattern"];
files = System.IO.Directory.GetFiles(path, searchPattern);
}
protected void ButtonPlay_Click(object sender, EventArgs e)
{
int selectedIndex = ListBoxFiles.SelectedIndex;
SoundPlayer soundPlayer = new SoundPlayer(files[selectedIndex]);
soundPlayer.Play();
}
Как видно из кода выше, я заявляю string[] files
как переменная-член. Затем я назначаю его в ButtonLoad_Click
метод. Но это бросает NullReferenceException
когда я пытаюсь получить доступ к нему в ButtonPlay_Click
метод, если string[] files
объявлен статическим.
Означает ли это, что новый объект System.Web.UI.UserControl
не создается при загрузке пользовательского элемента управления на странице asp.net? Означает ли это, что когда несколько клиентов (браузеров) пытаются воспроизвести файлы WAV, только один экземпляр string[] files
создается на сервере для использования всеми клиентами?
1 ответ
Я подозреваю, что проблема не в том, что к нему вообще нельзя получить доступ. Я сильно подозреваю, что проблема в том, что у вас есть два разных запроса, и, следовательно, два разных случая WaveFilePlayer
- так, когда вы выполняете ButtonPlay_Click
, files
переменная будет нулевой, если вы не написали код для сохранения его между запросами.
Здесь можно указать состояние просмотра или сеанс на стороне сервера. Вы не должны использовать статическую переменную, поскольку это в основном означает, что у вас есть одна переменная, общая для всех запросов (для всех пользователей).