Я пытаюсь выполнить тест;набор вопросов и ответов, где у каждого вопроса есть несколько вариантов выбора (список переключателей).Все вопросы и возможные ответы хранятся в базе данных.Это очень просто реализовать с помощью повторителя, если все вопросы один за другим, но я должен отображать их по одному, как мастер.
Я пытался использовать комбинацию мастера и повторителя, нополучить кучу ошибок (перечисленных ниже).Есть ли способ создать это;Я не ищу код, просто идеи о том, как это сделать.
Это то, что я устал (и не смог):
<asp:Repeater runat="server" ID="rptBronzeTest">
<HeaderTemplate>
<asp:Wizard
ID="wizTest"
runat="server"
ActiveStepIndex="0"
DisplaySideBar="false"
OnNextButtonClick="wizTest_NextButtonClick" >
<WizardSteps>
</HeaderTemplate>
<ItemTemplate>
<asp:WizardStep ID="wsStep" runat="server" StepType='<%# Container.ItemIndex == 0 ? "Start" : (Container.ItemIndex == ((IList)((Repeater)Container.Parent).DataSource).Count-1 ? "Finish" : "Step"%>'>
<asp:HiddenField runat="server" ID="hfQuestionID" Value='<%# Eval("QuestionID")%>' />
<div class="row">
<!-- QuestionID, AnswerID, TrackID, QuestionText, QuestionOrder, NumOptions -->
<div class="col-centered col-sm-12"><label><%# Eval("QuestionOrder")%>. <%# Eval("QuestionText")%></label></div>
</div>
<div class="survey-question">
<div class="row" style="padding-left:20px;">
<!-- QuestionID, AnswerID, Answer, AnswerOrder -->
<asp:RadioButtonList runat="server" ID="rblAnswers" RepeatDirection="Vertical" DataTextField="Answer" DataValueField="AnswerID"></asp:RadioButtonList>
</div>
</div>
</asp:WizardStep>
</ItemTemplate>
<FooterTemplate>
<asp:WizardStep ID="wsComplete" runat="server" StepType="Complete">
</asp:WizardStep>
</WizardSteps>
<FinishNavigationTemplate>
<asp:ImageButton runat="server" ID="ibFinishPrev"
ImageUrl="~/assets/images/Left_small.gif"
CommandName="MovePrevious"
CausesValidation="false"/>
<asp:ImageButton runat="server" ID="ibFinishComplete"
ImageUrl="~/assets/images/Check_small.gif"
OnClientClick="if(confirm('This will submit your test. Continue?')){ disableSubmit();}else return false;"
CommandName="Finish"
OnClick="ibFinishComplete_Click" />
</FinishNavigationTemplate>
</asp:Wizard>
</FooterTemplate>
</asp:Repeater>
Это приводит к следующей ошибке:
System.Web.UI.WebControls.WizardStepCollection must have items of type 'System.Web.UI.WebControls.WizardStepBase'. 'ItemTemplate' is of type 'System.Web.UI.HtmlControls.HtmlGenericControl'.
Если я удаляю мастера и просто использую ретранслятор, все вопросы / ответы отображаются корректно, один за другим.
Обновление
Попытка добавлениямастер динамически на стороне сервера для заполнителя.Хотя трассировка показывает, что он добавляет все шаги мастера, когда я запускаю его, я вижу вопрос 1 и возможные ответы, нажимаю «Далее» и ничего!
if (!Page.IsPostBack)
{
dtQuestions = GetTestQuestionsByTrack();
Wizard wzTest = new Wizard();
wzTest.ID = "wizBronzeTest";
wzTest.ActiveStepIndex = 0;
wzTest.CellPadding = 2;
wzTest.StartNextButtonType = ButtonType.Image;
wzTest.StartNextButtonImageUrl = "~/assets/images/Right_small.gif";
wzTest.StepNextButtonType = ButtonType.Image;
wzTest.StepNextButtonImageUrl = "~/assets/images/Right_small.gif";
wzTest.StepPreviousButtonType = ButtonType.Image;
wzTest.StepPreviousButtonImageUrl = "~/assets/images/Left_small.gif";
wzTest.CancelButtonImageUrl = "~/assets/images/Cancel.png";
wzTest.CancelButtonType = ButtonType.Image;
wzTest.DisplaySideBar = false;
wzTest.NextButtonClick += wizBronzeTest_NextButtonClick;
for (int i = 0; i <= dtQuestions.Rows.Count - 1; i++)
{
DataRow dr = dtQuestions.Rows[i];
WizardStepBase newStep = new WizardStep();
newStep.ID = dtQuestions.Rows[i]["QuestionID"].ToString();
newStep.StepType = i == 0 ? WizardStepType.Start : WizardStepType.Step;
HiddenField hfQuestionID = new HiddenField();
string sQuestionID = dr["QuestionID"].ToString();
hfQuestionID.Value = sQuestionID;
string sQuestion = dr["QuestionOrder"].ToString() + ". " + dr["QuestionText"].ToString();
Label lbl = new Label();
lbl.CssClass = "form-control-label";
lbl.Text = sQuestion;
HtmlGenericControl div1 = new HtmlGenericControl();
div1.Attributes.Add("class", "row");
HtmlGenericControl div2 = new HtmlGenericControl();
div2.Attributes.Add("class", "col-centered col-sm-12");
div2.InnerHtml = "<label>" + sQuestion + "</label>";
div1.Controls.Add(div2);
RadioButtonList rblAnswers = new RadioButtonList();
rblAnswers.ID = "rblAnswers";
rblAnswers.RepeatDirection = RepeatDirection.Vertical;
rblAnswers.DataTextField = "Answer";
rblAnswers.DataValueField = "AnswerID";
DataTable dtAnsers = AU_BronzeQuestionAnswer.GetQuestionAnswersByQuestionID(int.Parse(sQuestionID));
rblAnswers.DataSource = dtAnsers;
rblAnswers.DataBind();
newStep.Controls.Add(div1);
newStep.Controls.Add(rblAnswers);
wzTest.WizardSteps.Add(newStep);
}
phTest.Controls.Add(wzTest);
}