2014-10-14 2 views
-8

У меня есть разные методы, как я могу совместно использовать переменные strHeaderFileName (и т.д.) между ними? Например, мне нужен strHeaderFileName в методе btnSave_Click.Обмен переменными C# между методами?

protected void multiFileUpload_FileUploaded(object sender, FileUploadedEventArgs e) 
{ 
    // No Loop needed multiFileUpload_FileUploaded will be called for each file uploaded 
    var strHeaderFileName = e.File.FileName; 
    // Use the filename as the Header Name 
    var strHeaderName = strHeaderFileName.Replace(".jpg", ""); 
    // allow Underscore characters in FileName to become Spaces in the Display Name. 
    strHeaderName = strHeaderName.Replace("_", " "); 
} 

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    // use the same strHeaderFileName value here? 
} 
+3

Вы пробовали его определение _outside_ ваших методов, на уровне класса? –

+1

Читайте об [полях] (http://msdn.microsoft.com/en-US/library/ms173118 (v = vs.80) .aspx) – Vache

+1

@GrantWinney Обычно я помещал их в начало класса, но didn Не хотите прокручивать 1000 строк кода, чтобы разместить их там. lol надеялся, что есть другой способ. – JoJo

ответ

4

Есть несколько вариантов. Поскольку эти методы обработчики событий и непосредственно не вызываются, лучший подход здесь, скорее всего, чтобы сделать переменные член класса уровня:

private string strHeaderFileName; 

protected void multiFileUpload_FileUploaded(object sender, FileUploadedEventArgs e) 
{ 
    strHeaderFileName = e.File.FileName; 
    // etc. 
} 

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    // here you can access strHeaderFileName 
} 

В качестве членов класса уровня, они будут доступны любого метода в этом классе. (Убедитесь, что вы держите их private или другие объекты также смогут получить к ним доступ, что вам, вероятно, не нужно в этом случае.) И они будут существовать для жизни любого данного экземпляра этого класса.

Также обратите внимание на, что это выглядит как ASP.NET, который ведет себя по-другому в терминах экземпляров класса, чем такие, как WinForms. Любой данный экземпляр Page не сохраняется между запросами. Поэтому, если вы установите значение в одном обработчике, снова отобразите страницу, а затем вызовите другой обработчик, значение больше не будет там. Это связано с тем, что экземпляр класса для каждого Page создается для каждого запроса и затем уничтожается после ответа.

Для того, чтобы сохранять запросы страниц, вам нужно сохранить значение где-то в другом месте. Например, если это необходимо, чтобы жить в течение рамки одного сеанса пользователя, то вы можете поместить его в состоянии сеанса:

protected void multiFileUpload_FileUploaded(object sender, FileUploadedEventArgs e) 
{ 
    Session["strHeaderFileName"] = e.File.FileName; 
    // etc. 
} 

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    // here you can access Session["strHeaderFileName"] 
} 

В зависимости от сферы, в которой значение должно сохраняться, вы также можете поместить его на страницы, в файле cookie, в базе данных, в некотором кэширующем механизме и т. д.

2

Наиболее подходящий вариант в данном случае, кажется: использовать поле экземпляра:

string strHeaderFileName; 

protected void multiFileUpload_FileUploaded(object sender, FileUploadedEventArgs e) 
{ 
    // ... 
    strHeaderFileName = e.File.FileName; 
    // ... 
} 

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    // can use strHeaderFileName 
} 
2

Вы должны сделать их переменными-членами вместо локальных переменных, например

string strHeaderFileName; 
string strHeaderName; 

    protected void multiFileUpload_FileUploaded(object sender, FileUploadedEventArgs e) 
{ 
    // No Loop needed multiFileUpload_FileUploaded will be called for each file uploaded 
    strHeaderFileName = e.File.FileName; 
    // Use the filename as the Header Name 
    strHeaderName = strHeaderFileName.Replace(".jpg", ""); 
    // allow Underscore characters in FileName to become Spaces in the Display Name. 
    strHeaderName = strHeaderName.Replace("_", " "); 
} 

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    // strHeaderFileName is now accessible here 
} 
2

Объявление var strHeaderFileName как участник вашего класса. Так что, если это страница, например

class Page 
{ 
    private string strHeaderFileName; 
protected void multiFileUpload_FileUploaded(object sender, FileUploadedEventArgs e) 
    { 
     // No Loop needed multiFileUpload_FileUploaded will be called for each file uploaded 
     strHeaderFileName = e.File.FileName; 
     // Use the filename as the Header Name 
     var strHeaderName = strHeaderFileName.Replace(".jpg", ""); 
     // allow Underscore characters in FileName to become Spaces in the Display Name. 
     strHeaderName = strHeaderName.Replace("_", " "); 
    } 

    protected void btnSave_Click(object sender, EventArgs e) 
    { 
     // use the same strHeaderFileName value here? 
     someFunctionUses(strHeaderFileName); 
    } 
} 
+0

фрагменты кода предназначены только для исполняемого кода браузера, он не работает для C# – paqogomez

Смежные вопросы