如何在 Web 窗体之间共享变量

本文关键字:之间 共享变量 窗体 Web | 更新日期: 2023-09-27 17:56:00

我正在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);
    }

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

如何在 Web 窗体之间共享变量

考虑Another_form是一个包含方法的新形式的类应该接受一个对象(人类)...例如

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) 
} 

您可以改为使表单生成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 代码和业务代码分开

我建议你研究关注点分离。您可以在那里学习一两个关于正确应用程序设计的技巧。

你是说你已经填充了一个 person 对象,然后在另一个表单上你想引用该 person 对象的相同实例?最简单的方法可能是将对象存储在 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)中。