동일한 동적으로 생성 된 드롭 다운과 해당 viewstate에 문제가 있습니다.동적으로 생성 된 드롭 다운 포스트 백
간단히 말해서, 사용자가 Excel 파일을 업로드하면 파일이 구문 분석되고 해당 데이터에 대한 드롭 다운이 만들어집니다. 이 ASP가 버튼을 누를 때 수행되어, 다음과 같이 제어 테이블에 추가된다
public void generateFromSheet(OrderedDictionary columns, DataTable oppcolumns, List<string> requiredDrops)
{
int index = 0;
foreach (DictionaryEntry entry in columns)
{
DropDownList ddl = new DropDownList()
{
ID = "ddlMapping" + entry.Key.ToString(),
DataSource = columns,
DataTextField = "Key",
DataValueField = "Value",
SelectedIndex = index,
Enabled = requiredDrops.Contains(entry.Key) ? false : true
};
ddl.DataBind();
DropDownList ddl2 = new DropDownList()
{
ID = "OpportunityMappingDdl" + index,
DataSource = oppcolumns,
DataTextField = "AttributeDisplayName",
DataValueField = "TableColumnName"
};
ddl2.DataBind();
HtmlTableCell td = new HtmlTableCell()
{
ID = "tdMapping" + index
};
td.Controls.Add(ddl);
HtmlTableCell td2 = new HtmlTableCell()
{
ID = "tdOppMapping" + index
};
td2.Controls.Add(ddl2);
HtmlTableRow tr = new HtmlTableRow()
{
ID = "trMapping" + index
};
tr.Cells.Add(td);
tr.Cells.Add(td2);
tblFileMapping.Rows.Add(tr);
index++;
}
}
그러나,이 후 각 포스트 백 드롭 다운이 소거된다. 필자는 솔루션을 온라인에서 찾아 보았습니다. 일반적으로 모든 것이 ViewState에서 상태를 복원 할 수 있도록 작성된 것과 동일한 ID를 사용하여 컨트롤을 다시 작성합니다. 나는 해봤이 내가의 ViewState에 작성해야하는지에 저장하여 아래에 다음과 같이
public void generateFromViewState()
{
OrderedDictionary columns = (OrderedDictionary) ViewState["XLColumns"];
int index = 0;
foreach (DictionaryEntry entry in columns)
{
DropDownList ddl = new DropDownList()
{
ID = "ddlMapping" + entry.Key.ToString(),
};
DropDownList ddl2 = new DropDownList()
{
ID = "OpportunityMappingDdl" + index,
};
HtmlTableCell td = new HtmlTableCell()
{
ID = "tdMapping" + index
};
td.Controls.Add(ddl);
HtmlTableCell td2 = new HtmlTableCell()
{
ID = "tdOppMapping" + index
};
td2.Controls.Add(ddl2);
HtmlTableRow tr = new HtmlTableRow()
{
ID = "trMapping" + index
};
tr.Cells.Add(td);
tr.Cells.Add(td2);
tblFileMapping.Rows.Add(tr);
index++;
}
}
나는를 Page_Load에서이 메소드를 호출하지만 컨트롤은 이전 데이터와 선택된 값을 유지하지 않습니다.
그래서 잘못 여기에 몇 가지 :
컨트롤이 재현 그러나 그들의 상태가 복원되지 않습니다를 Page_Load에- .
- 몇 가지 기술적 인 이유로 프로젝트 관리자는 세션 상태를 사용하여 저장하지 말아야한다고 언급했습니다.
- 다른 PM이 page_init에서 컨트롤을 재생성해야한다고 조언했습니다. 하지만 ViewState에 컨트롤 데이터를 저장하고 있기 때문에 viewstate가 준비되지 않았고 데이터가 null이기 때문에 이것이 불가능합니다.
누구나 성공적으로 동적으로 생성 된 컨트롤에 대한 viewstate를 복원하는 방법에 대해 조언 할 수 있습니다. 모든 것을 검색해 보았고 여러 가지 솔루션을 온라인에서 시도했지만 시도하지 않은 것은 효과가있는 것 같습니다.
감사합니다.
Repeater, Datagrid 또는 Gridview와 같은 Repeater를 사용하는 대신 HTML 표 셀과 ROWS 및 Column을 렌더링하는 특별한 이유가 있습니다. –
아니요, 기존 페이지를 수정 중이며 내용이이 문제에서 생성됩니다. 다른 곳에서 나는 그것을 따라갈 것이라고 생각했다. 이러한 컨트롤은 OnInit에서 필요한 데이터가 사전에 저장되어 있으므로 수행됩니다. 그렇지 않으면 상태가 유지됩니다. Repeater 나 Datagrid를 사용하면 문제가 해결됩니까? – SikhWarrior