Użyj zmiennej w różnych klasach w formularzach internetowych c#

Myślę, że mam stos w czymś prostym.

Mam następujący kod:

public void Button1Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
    {
        if (FileUpload1.PostedFile.ContentType == "text/xml")
            {

                    string filename = Path.GetFileName(FileUpload1.FileName);
                    FileUpload1.SaveAs(Server.MapPath("~/") + filename);
                    StatusLabel.Text = "Upload status: File uploaded!";

                    DataSet ds = new DataSet();
                    ds.ReadXml((Server.MapPath(filename)));
                    GridView1.DataSource = ds;
                    GridView1.DataBind();
            }
            else
                StatusLabel.Text = "Only xml files are accepted!";

    }
}

public void Button2_Click1(object sender, EventArgs e)
{

}    

Chcę, aby użytkownik wykonał ten kod w button2

                    DataSet ds = new DataSet();
                    ds.ReadXml((Server.MapPath(filename)));
                    GridView1.DataSource = ds;
                    GridView1.DataBind();

Mój problem polega na tym, że nazwa pliku zmiennej nie jest dostępna na zewnątrz

public void Button1Click(object sender, EventArgs e)

Z góry dziękuje za twoją pomoc! Chris


person Unseen    schedule 10.10.2011    source źródło
comment
to NIE są różne klasy, to są różne metody tej samej klasy / formularza internetowego...   -  person Davide Piras    schedule 10.10.2011


Odpowiedzi (3)


Zapisz nazwę pliku w Session lub ViewState podczas przesyłania pliku.

public void Button1Click(object sender, EventArgs e)
{
    ..
    string filename = Path.GetFileName(FileUpload1.FileName);
    ...
    Session["filename"]=filename;
}

Kod w obsłudze kliknięć Button2,

public void Button2_Click1(object sender, EventArgs e)
{
 if(Session["filename"]!=null)
 { 
  string filename=Session["filename"].ToString();
  DataSet ds = new DataSet();
  ds.ReadXml((Server.MapPath("~/" + filename)));
  GridView1.DataSource = ds;
  GridView1.DataBind();
}  
person kv-prajapati    schedule 10.10.2011
comment
jeśli wartość jest potrzebna tylko na tej stronie, NIE używałbym Sesji. - person Davide Piras; 10.10.2011

możesz utrwalić zmienną na stronie ViewState w ten sposób:

private string fileName
{
    get { return ViewState["fileName"] != null ? (string)ViewState["fileName"] : String.Empty; }
    set { ViewState["fileName"] = value; }
}
person Davide Piras    schedule 10.10.2011

Właściwie tutaj możesz mieć ogromną ilość wariantów:

  1. Możesz uzyskać tę wartość z kontroli przesyłania plików, po prostu używając tej samej metody, która została użyta w Button1Click:

    string filename = Path.GetFileName(FileUpload1.FileName);
    
  2. Bardziej poprawnie, jest przechowywanie w ViewState, jak powiedziano wcześniej.

  3. Jeśli chcesz użyć tego na innych stronach, po prostu zapisz to w sesji.

person dimko1    schedule 10.10.2011