如何在Web表单之间共享变量?

时间:2014-04-01 12:46:07

标签: c# asp.net

我正在使用C#.Net开发一个Web应用程序,我需要将变量从表单传递到另一个表单。例如,在第一种形式中,我有人类如下;

public class Person
{
    private string _Name;
    private string _Surname;
    private string _DateOfBirth;
    private string _Gender;
    private string _Symptoms;

    public Person()
    {
        Name = "Not available";
        Surname = "Not available";
        DateOfBirth = "Not available";
        Gender = "Not available";
        Symptoms = "Not available";
    }

    public string Name
    {
        get { return _Name; }
        set { _Name = value; }
    }
    public string Surname
    {
        get { return _Surname; }
        set { _Surname = value; }
    }
    public string DateOfBirth
    {
        get { return _DateOfBirth; }
        set { _DateOfBirth = value; }
    }
    public string Gender
    {
        get { return _Gender; }
        set { _Gender = value; }
    }
    public string Symptoms
    {
        get { return _Symptoms; }
        set { _Symptoms = value; }
    }
}

然后我分配值;

protected void Page_Load(object sender, EventArgs e)
    {
        Person MyPerson = new Person();
        MyPerson.Name = txtName.Text;
        MyPerson.Surname = txtSurname.Text;
        MyPerson.DateOfBirth = txtBirth.Text;
        MyPerson.Gender = listGender.Text;
        MyPerson.Symptoms = checked(listSymptoms.Text);
    }

那么,我如何将这些值用于另一种形式呢?

3 个答案:

答案 0 :(得分:2)

考虑Another_form是一个新表单的类,其中包含一个方法应该接受一个对象(person class)...例如

public void foo(Person obj) 
{ ///your code } 

它是......然后你必须从另一个形式传递变量,如

protected void Page_Load(object sender, EventArgs e) 
{ 
Person MyPerson = new Person(); 
MyPerson.Name = txtName.Text; 
MyPerson.Surname = txtSurname.Text; 
MyPerson.DateOfBirth = txtBirth.Text; 
MyPerson.Gender = listGender.Text; 
MyPerson.Symptoms = checked(listSymptoms.Text); 
another_form f=new another_form();
f.foo(MyPersion) 
} 

答案 1 :(得分:1)

您可以让表单生成Person实例:

// within your form class, whatever it is
public Person CreatePerson()
{
    Person MyPerson = new Person();
    MyPerson.Name = txtName.Text;
    MyPerson.Surname = txtSurname.Text;
    MyPerson.DateOfBirth = txtBirth.Text;
    MyPerson.Gender = listGender.Text;
    MyPerson.Symptoms = checked(listSymptoms.Text);
    return MyPerson;
}

然后,从代码中的任何位置调用表单实例的CreatePerson方法:

var personFromUI = yourFormInstance.CreatePerson();

这是一种方式。

您还可以将此人公开为您表单的属性,或者在您的应用程序对象中传递Person实例,无论是表单,控件,控制器等等......这超出了您的范围问题,这将是首选方式,因为保持您的UI代码和业务代码分离

我建议您查看 separation of concerns 。你可以在那里学习一两个关于正确应用程序设计的技巧。

答案 2 :(得分:1)

你是说你已经填充了一个人物对象,然后在另一个表格上你想引用那个人物对象的同一个实例?可能最简单的方法是将对象存储在Session中,然后在第二个表单上检索它。

protected void Page_Load(object sender, EventArgs e)
{
    Person MyPerson = new Person();
    MyPerson.Name = txtName.Text;
    MyPerson.Surname = txtSurname.Text;
    MyPerson.DateOfBirth = txtBirth.Text;
    MyPerson.Gender = listGender.Text;
    MyPerson.Symptoms = checked(listSymptoms.Text);
    Session["CurrentPerson"] = MyPerson;

}

就个人而言,我通常不会以这种方式使用会话,而是将这种类型的工作流构建到我的应用持久层(例如Sql Server,Redis)。