如何在 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);
}
那么,如何将这些值用于另一种形式呢?
考虑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)中。