1

有用なリンクを提供してください。

VB.NET でサンプルの質問タイプ Web フォームを作成する必要があります。これにより、ユーザーは次のことができるようになります。

  1. ユーザーはドロップダウンからコントロール タイプを選択します (TextBox、RadioButton、ListBox など)。
  2. Web フォームのコントロール タイプに基づいてコントロールを動的に生成します。
  3. 常に TextBox (ユーザーが質問を書き込む場所) と (生成されたコントロール - TextBox、RadioButton、ListBox など) を表示し、それらの値をデータベースに保存します。

  4. 生成されたサンプル問題を Web フォームに表示します。

ありがとう。

4

3 に答える 3

0

DataBinding を使用して、宣言構文を使用してこれと同様のことを行いました。

コードが長くて申し訳ありませんが、ネストされたリピーターなしで関連部分だけを投稿するのは意味がないかもしれません。コンテキストのために完全な Nested Repeater コードを投稿しています。

私の設定では、これは1 つ以上の質問(ネストされたリピーター ) で構成される質問グループ(外部リピーター) を備えた調査アプリです。

これがどのように機能するかの関連部分は、コード サンプルのネストされたリピーターにあります。マークアップで使用できるすべてのコントロールがありました。ただし、それぞれの .Visible プロパティは QuestionType に基づいて設定されました。

    <asp:Repeater ID="Repeater1" runat="server">
        <ItemTemplate>
            <div class="questiongroup">
                <asp:HiddenField runat="server" ID="lblQuestionGroupId" Value='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "QuestionGroupId").ToString()) %>'>
                </asp:HiddenField>
                <asp:HiddenField runat="server" ID="hfSortOrder" Value='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "SortOrder").ToString()) %>'>
                </asp:HiddenField>
                <asp:HiddenField runat="server" ID="hdnPointsAwarded" Value='0'></asp:HiddenField>
                <br />
                <h3><asp:Label runat="server" ID="txtQuestionGroupName" MaxLength="50" Columns="50" Text='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "QuestionGroupName").ToString()) %>'></asp:Label>
                </h3>
                Score Section
                <asp:CheckBox runat="server" ID="chkIsScoreSection" Enabled="false" TabIndex="-1"
                    Checked='<%# Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "IsScoreSection")) %>' />
                Minimum required correct answers:
                <asp:Label runat="server" ID="lblMinimumForScore" MaxLength="3" Columns="3" Text='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "CommentsRequiredMinimumYesAnswers").ToString()) %>'></asp:Label>
                  Point Value <asp:Label ID="lblPossiblePoints" runat="server" Text='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "PossiblePoints").ToString()) %>' />
                          <br />
                Group Instructions
                <br />
                <asp:Label runat="server" ID="lblGroupInstructions" TextMode="MultiLine" Columns="50" Rows="3"
                    Text='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "GroupInstructions").ToString()) %>'></asp:Label>
                <br />
                <div class='questionseditor'>
                </div>
                <br />
                <div class="questionsdiv">
                    <asp:Repeater ID="childRepeater" runat="server" DataSource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("Relation2") %>'>
                        <ItemTemplate>
                        <div class="question">
                            <asp:HiddenField ID="hdnQuestionType" runat="server" Value='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) %>' />
                            <asp:HiddenField ID="hdnQuestionId" runat="server" Value='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"QuestionId\"]").ToString()) %>' />
                            <asp:HiddenField ID="hfQuestionSortOrder" runat="server" Value='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"SortOrder\"]").ToString()) %>' />
                            <asp:RequiredFieldValidator SetFocusOnError="True" ID="YesNoForScoreRequiredFieldValidator" runat="server"
                                ControlToValidate="lstYesNoForScore" Display="Dynamic" ErrorMessage="Required<br />"
                                Enabled='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "1" %>'></asp:RequiredFieldValidator>
                            <asp:RequiredFieldValidator SetFocusOnError="True" ID="MemoRequiredFieldValidator" runat="server" ControlToValidate="txtMemoAnswer"
                                Display="Dynamic" ErrorMessage="Required<br />" 
                                Enabled='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "2" %>'></asp:RequiredFieldValidator>
                            <asp:RequiredFieldValidator SetFocusOnError="True" ID="NumericAnswerRequiredFieldValidator" runat="server"
                                ControlToValidate="txtNumericAnswer" Display="Dynamic" ErrorMessage="Required<br />"
                                Enabled='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "3" %>'></asp:RequiredFieldValidator>
                            <asp:RegularExpressionValidator SetFocusOnError="True" Display="Dynamic" runat="server" ID="NumericTextRegexValidator"
                                ValidationExpression="^\d*[0-9](|.\d*[0-9]|,\d*[0-9])?$" Enabled='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "3" %>'
                                ErrorMessage="*Invalid<br />" ControlToValidate="txtNumericAnswer"></asp:RegularExpressionValidator>
                            <asp:RequiredFieldValidator SetFocusOnError="True" ID="RequiredFieldValidator1" runat="server" ControlToValidate="lstYesNoNonScored"
                                Display="Dynamic" ErrorMessage="Required<br />" Enabled='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "5" %>'></asp:RequiredFieldValidator>
                            <asp:Label ID="lblQuestionText" runat="Server" Text='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"QuestionText\"]").ToString()) %>'></asp:Label><br />
                            <asp:RadioButtonList runat="server" ID="lstYesNoForScore" RepeatDirection="Horizontal"
                                Visible='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "1" %>'>
                                <asp:ListItem Text="Yes" Value="1"></asp:ListItem>
                                <asp:ListItem Text="No *" Value="0"></asp:ListItem>
                            </asp:RadioButtonList>
                            <asp:TextBox ID="txtMemoAnswer" runat="server" Visible='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "2" %>'
                                TextMode="MultiLine" Rows="3" Width="100%"></asp:TextBox>
                            <asp:TextBox ID="txtNumericAnswer" runat="server" Visible='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "3" %>'
                                cols="5"></asp:TextBox>
                            <uc1:MultipleChoiceControl ID="MultipleChoiceControl1" runat="server" Visible='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "4" %>'
                                QuestionId='<%# Convert.ToInt32(DataBinder.Eval(Container.DataItem, "[\"QuestionId\"]")) %>' />
                            <asp:RadioButtonList runat="server" ID="lstYesNoNonScored" RepeatDirection="Horizontal"
                                Visible='<%#  Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(  DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "5" %>'>
                                <asp:ListItem Text="Yes" Value="1"></asp:ListItem>
                                <asp:ListItem Text="No" Value="0"></asp:ListItem>
                            </asp:RadioButtonList>
                            <br />
                            </div>
                        </ItemTemplate>
                    </asp:Repeater>
                </div>
                Comments for this Question Group (Required if score not awarded)
                <asp:TextBox ID="txtGroupComments" runat="server" TextMode="MultiLine" Rows="3" Width="100%"></asp:TextBox>
            </div>
        </ItemTemplate>
    </asp:Repeater>
于 2012-06-12T19:43:21.807 に答える
0

このようなものは機能するはずです(データベースとのやり取りなし;))。

aspx:

<asp:DropDownList runat="server" id="TypeDropDown" OnSelectedIndexChanged="OnTypeChanged">
  <asp:ListItem>TextBox</asp:ListItem>
  <asp:ListItem>RadioButton</asp:ListItem>
</asp:DropDownList>
<asp:Panel>
    Question: <asp:TextBox runat="server" ID="Question" /> <br />
    Answer: <asp:PlaceHolder runat="server" ID="Place" />
</asp:Panel>

コード ビハインド:

protected override void OnInit(EventArgs eventArgs) {
  base.OnInit(eventArgs);
  CreateDynamicControl(); 
}

private void CreateDynamicControl() {
  Place.Controls.Clear();
  Place.Controls.Add(ControlFactory.Create(TypeDropDown.SelectedValue);
}

private void OnTypeChanged(object sender, EventArgs eventArgs) {
  CreateDynamicControl();
}

制御工場:

static class ControlFactory {
  public static Control Create(string type) {
    if ("TextBox".Equals(type))
      return new TextBox();

    if ("RadioButton".Equals(type)) 
      return new RadioButtonList();
  }
}
于 2012-06-12T19:31:34.650 に答える
0

あなたが探しているのは、コントロールのタイプを DB に保存し、タイプを見てプレースホルダーを使用して必要なものを生成するページを表示するときよりも DBMS ソリューションだと思います。DBMS を説明するウィキペディアへのリンクは次のとおりです: http://en.wikipedia.org/wiki/Database_management_system

于 2012-06-12T19:37:31.807 に答える