0
3 단계의 마법사 단계가있는 폼이 있는데, 버튼을 클릭하면 동적으로 텍스트 상자를 추가하면 제대로 작동하지만 다음 단계로 가서 추가를 클릭하면 더 많은 텍스트 상자를 추가하면 이전 단계의 모든 텍스트 상자가 자동으로 추가 된 다음 계속 클릭하면 계속 추가됩니다.ASP .NET 마법사 컨트롤 및 뷰 상태
어떻게 이런 일이 발생하지 않도록 할 수 있습니까?
개인 목록 ControlsList { ) ( { (ViewState를 [ "컨트롤"] == NULL) { 의 ViewState [ "컨트롤"] = 경우 새로운리스트를 얻는다; } return (목록) ViewState [ "controls"]; } }
private int NextID
{
get
{
return ControlsList.Count + 1;
}
}
protected override void LoadViewState(object savedState)
{
string section = Wizard1.ActiveStep.ID;
int sectionNum = Wizard1.ActiveStepIndex;
var control = Wizard1.ActiveStep.FindControl("Place" + sectionNum) as PlaceHolder;
base.LoadViewState(savedState);
int count = 0;
foreach (string txtID in ControlsList)
{
if (count == 0)
{
control.Controls.Add(new LiteralControl("<tr>"));
}
TextBox txt = new TextBox();
control.Controls.Add(new LiteralControl("<td>"));
txt.ID = txtID;
control.Controls.Add(txt);
control.Controls.Add(new LiteralControl("</td>"));
count = count + 1;
if (count == 3)
{
control.Controls.Add(new LiteralControl("</tr>"));
count = 0;
}
}
}
protected void AddControlButton_Click(object sender, EventArgs e)
{
string section = Wizard1.ActiveStep.ID;
int sectionNum = Wizard1.ActiveStepIndex;
var control = Wizard1.ActiveStep.FindControl("Place" + sectionNum) as PlaceHolder;
TextBox txt1 = new TextBox();
TextBox txt2 = new TextBox();
TextBox txt3 = new TextBox();
txt1.ID = section.ToString() + "Size" + NextID.ToString();
control.Controls.Add(new LiteralControl("<td>"));
control.Controls.Add(txt1);
control.Controls.Add(new LiteralControl("</td>"));
ControlsList.Add(txt1.ID);
txt2.ID = section.ToString() + "Description" + NextID.ToString();
control.Controls.Add(new LiteralControl("<td>"));
control.Controls.Add(txt2);
control.Controls.Add(new LiteralControl("</td>"));
ControlsList.Add(txt2.ID);
txt3.ID = section.ToString() + "Quantity" + NextID.ToString();
control.Controls.Add(new LiteralControl("<td>"));
control.Controls.Add(txt3);
control.Controls.Add(new LiteralControl("</td></tr>"));
ControlsList.Add(txt3.ID);
}
좋은 아이디어가 당신의 응답을 주셔서 감사합니다 :
나의 추천은이 같은 마법사의 각 단계에서 텍스트 상자 컨트롤을 구별 할 수 있기 때문에, 대신
ViewState
의Session
캐시를 사용하는 것입니다. 전에는 세션을 사용 해본 적이 없지만 세션을 사용하려면 코드를 수정해야하는 부분을 알려주십시오. – user2593590동적으로 생성 된 텍스트 상자를 디스크/데이터베이스에 저장하거나 마법사를 실행할 때마다 새로운 경험을하고 있습니까? –
마법사가 실행될 때마다 새로운 경험을합니다. – user2593590