0
好的,所以我需要將每個輸入從文本框中保存到一個會話變量中。問題是這是動態的,這意味着texbox ID是NatureTextbox_1,NatureTexbox_2等。由於texbox的可用量很少,這使得很難保存每個會話變量。我一直在試圖解決這個問題,並且試圖成爲一個noob並且詢問你們的建議。如果你能給我任何關於該怎麼做的信息,我會很感激。在動態texbox中使用會話
這是C#代碼(記住文本框的是動態的意思是無限的):
protected void Page_Load(object sender, EventArgs e)
{
// Add any controls that have been previously added dynamically
for (int i = 0; i < TotalNumberAdded; ++i)
{
AddControls(i + 1);
}
}
private void AddControls(int controlNumber)
{
var newPanel = new Panel();
var natureLabel = new Label();
var dateLabel = new Label();
var fatalLabel = new Label();
var injurLabel = new Label();
var natureTextbox = new TextBox();
var dateTextbox = new TextBox();
var fatalTextbox = new TextBox();
var injurTextbox = new TextBox();
//Validations
var dateRegex = new RegularExpressionValidator();
//*****CURRENT IDEA THAT ISNT WORKING***********************************
Session["Nature" + (TotalNumberAdded - 1)] = natureTextbox.Text.ToString();
Session["Date" + (TotalNumberAdded - 1)] = dateTextbox.Text.ToString();
Session["Fatal" + (TotalNumberAdded - 1)] = fatalTextbox.Text.ToString();
Session["injury" + (controlNumber - 1)] = injurTextbox.Text.ToString();
//**********************************************************************
// textbox needs a unique id to maintain state information
natureTextbox.ID = "NatureTextBox_" + controlNumber;
dateTextbox.ID = "DateTextbox_" + controlNumber;
fatalTextbox.ID = "fatalTextbox_" + controlNumber;
injurTextbox.ID = "injurTextbox_" + controlNumber;
natureLabel.Text = "Nature Of Accident: ";
dateLabel.Text = "Date: ";
fatalLabel.Text = "Fatalities: ";
injurLabel.Text = "Injuries: ";
dateRegex.ID = "DateRegex_" + controlNumber;
dateRegex.Text = "Please enter in format MM/DD/YYY";
dateRegex.ValidationExpression = @"^(((0?[1-9]|1[012])/(0?[1-9]|1\d|2[0-8])|(0?[13456789]|1[012])/(29|30)|(0?[13578]|1[02])/31)/(19|[2-9]\d)\d{2}|0?2/29/((19|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00)))$";
dateRegex.ControlToValidate = dateTextbox.ID;
// add the label and textbox to the panel, then add the panel to the form
newPanel.Controls.Add(new LiteralControl("<table><tr>"));
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(new LiteralControl("<td class='title-text' >"));
newPanel.Controls.Add(natureLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'width='180px'>"));
newPanel.Controls.Add(natureTextbox);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text' >"));
newPanel.Controls.Add(dateLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(dateTextbox);
newPanel.Controls.Add(new LiteralControl("<br />"));
newPanel.Controls.Add(dateRegex);
newPanel.Controls.Add(new LiteralControl("</td></tr>"));
newPanel.Controls.Add(new LiteralControl("<tr><td class='title-text'>"));
newPanel.Controls.Add(fatalLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(fatalTextbox);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(injurLabel);
newPanel.Controls.Add(new LiteralControl("</td><td class='title-text'>"));
newPanel.Controls.Add(injurTextbox);
newPanel.Controls.Add(new LiteralControl("</td></tr></table><br /><hr />"));
AccidentPlaceHolder.Controls.Add(newPanel);
}
protected int TotalNumberAdded
{
get { return (int)(ViewState["TotalNumberAdded"] ?? 0); }
set { ViewState["TotalNumberAdded"] = value; }
}
protected void AccidentButton_Click(object sender, EventArgs e)
{
TotalNumberAdded++;
AddControls(TotalNumberAdded);
}
protected void PrevPage_Click(object sender, EventArgs e)
{
Response.Redirect("employment_driversapplication_personalinfo.aspx");
}
}
我打算這樣做,「下一步」按鈕,當他們去到下一個頁面 – user1574685
也該代碼是在我頭上的方式......我還挺小白本,並不太清楚什麼布萊恩on – user1574685
您的代碼距離您不是100萬英里,但您創建控件時無法將值保存到會話中,因爲該值尚未從'ViewState'填充,所以在'OnPreRender'中也是如此檢查控件是否已添加,因爲您正在將它們重新添加到「Page_Load」中,並再次在click事件處理程序中添加它們。 –