DropDownList を使用して、ユーザーがフォーム テンプレートを選択できるようにしています。その後、ユーザーはサーバーにポストバックし、テンプレートからのユーザー コントロールがページに動的にレンダリングされます。ユーザーがフォームに入力して [保存] をクリックすると、ユーザー コントロールの ViewState が失われ、値が空になります。
ページ コントロール
<air:CreateEditForm ID="CreateEditForm" runat="server" />
<asp:PlaceHolder ID="phDynamicControls" runat="server" />
<p>
<asp:Button ID="btnCreate" runat="server" Text="Create" OnClick="btnCreate_Click" CssClass="action-button" />
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" CssClass="action-button" Visible="false" />
<asp:HyperLink ID="linkCancel" runat="server" Text="Cancel" NavigateUrl="Index.aspx" CssClass="action-button" />
</p>
ページコード
protected void btnCreate_Click(object sender, EventArgs e)
{
CreateDynamicSteps();
}
private void CreateDynamicSteps()
{
foreach (WorkflowTemplate workflowTemplate in template.WorkflowTemplates)
{
foreach (WorkflowTemplateStep workflowStep in workflowTemplate.WorkflowTemplateSteps)
{
if (workflowStep.SubSteps.Count > 0)
{
foreach (WorkflowTemplateStep workflowSubStep in workflowStep.SubSteps)
{
if (workflowSubStep.WhoIsDynamic)
{
dynamicSteps.Add(workflowSubStep);
}
}
}
else if (workflowStep.WhoIsDynamic)
{
dynamicSteps.Add(workflowStep);
}
}
}
// removed for brevity
foreach (WorkflowTemplateStep dynamicStep in dynamicSteps)
{
PersonSelectorDialog personSelector = (PersonSelectorDialog)LoadControl("~/Pages/UserControls/PersonSelectorDialog.ascx");
personSelector.ClientIDMode = System.Web.UI.ClientIDMode.Static;
personSelector.LabelID = "lbl" + dynamicStep.ID;
personSelector.Label = dynamicStep.Name + " Selector";
DynamicPersonSelectorDialogs.Add(personSelector);
}
// removed for brevity
}
private void LoadControls()
{
foreach (PersonSelectorDialog personSelector in DynamicPersonSelectorDialogs)
{
Label title = new Label();
title.ID = personSelector.LabelID;
title.ClientIDMode = System.Web.UI.ClientIDMode.Static;
title.Text = personSelector.Label;
phDynamicControls.Controls.Add(title);
phDynamicControls.Controls.Add(personSelector);
}
}