好的,我正在将一个C#程序改编成一个asp程序,我有一个包含一个列表框的主表单,另一个表示将新信息添加到列表框中。我可以在Application["getData"];
中填写第二个表格并保留值,但是当我转到另一个页面时,我需要运行以下代码。
public void AddGig()
{
AddGigForm frm = new AddGigForm();
if (Application["getData"] != null)
{
Application["saveData"] = Application["getData"];
gigList.addGig(frm.GetData());
UpdateListbox();
}
我在gigList.addGig
遇到问题,因为它返回到第二个表单上的方法GetData()
。我不知道还有什么可以使用。
GetData方法:
public GigOpportunity GetData()
{
Application["GetData"] = new GigOpportunity
(txtId.Text, gigDate.SelectedDate, txtVenue.Text, txtGenre.Text,
Convert.ToDouble(txtCost.Text), Convert.ToInt32(txtCapacity.Text), chkHeadliner.Checked, txtMainAct.Text, chkEngineer.Checked);
return new GigOpportunity(txtId.Text, gigDate.SelectedDate, txtVenue.Text, txtGenre.Text, Convert.ToDouble(txtCost.Text), Convert.ToInt32(txtCapacity.Text), chkHeadliner.Checked, txtMainAct.Text, chkEngineer.Checked);
}
addGig方法:
public void addGig(GigOpportunity gigOpportunity)
{
//Make sure a gig with this id does not already exist
foreach (GigOpportunity g in gigList)
{
if (g.GigId == gigOpportunity.GigId)
{
throw new DuplicateIdException();
}
}
gigList.Add(gigOpportunity);
}
答案 0 :(得分:1)
我现在明白你的问题。你不像在窗体中那样思考。你在其他形式中声明了这些方法。当您通过分配新的Form对象来调用它时,您将无法获得内部值,因为它们在您更改页面后已被处理。
所以在你的情况下:
if (Application["getData"] != null)
{
Application["saveData"] = Application["getData"];
gigList.addGig((GigOpportunity)Application["getData"]);
UpdateListbox();
}
但我建议您使用Session
对象而不是Application
对象。
您可以阅读更多相关信息here
所以你必须这样做:
if (Session["getData"] != null)
{
Session["saveData"] = Session["getData"];
gigList.addGig((GigOpportunity)Session["getData"]);
UpdateListbox();
}
您不需要创建第二个表单对象AddGigForm
,并且必须确保在声明为其分配会话的表单中调用方法GetData
。