在方法之间共享 C# 变量?

JoJ*_*oJo -7 c#

我有不同的方法如何strHeaderFileName在它们之间共享(等)变量?例如我需要strHeaderFileName在 btnSave_Click 方法中。

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?
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 5

有几个选项。由于这些方法是事件处理程序而不是直接调用,这里最好的方法可能是使变量类级别成员:

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
}
Run Code Online (Sandbox Code Playgroud)

作为类级别的成员,可以通过该类中的任何方法访问它们。(确保您保留它们,private否则其他对象也将能够访问它们,在这种情况下您可能不希望这样做。)并且它们将在该类的任何给定实例的生命周期内存在。

还要注意,这看起来像 ASP.NET,它在类实例方面的行为与 WinForms 之类的东西略有不同。任何给定的 a 实例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"]
}
Run Code Online (Sandbox Code Playgroud)

根据值需要持久化的范围,您还可以将其放在页面、cookie、数据库、某些缓存机制等中。