1

在 datalist 中使用必填字段验证器时遇到问题,

我们有 4 个民意调查。在那个用户必须回答两个必需的民意调查。

我已经在我的数据列表中添加了所有四个民意调查,它显示正常,并且在单击提交按钮时,必填字段验证器正在工作并给出错误消息。一旦我们回答了所需的投票并再次单击提交按钮,所有其他不需要的投票将显示为所需的投票。

我的投票答案提交没问题,我想避免显示非必需投票的错误消息。

你能帮我解决这个问题吗

这是我的设计和代码:

       <div id="pollQuestion_div" Class="read-messages-poll" runat="server" >

       <asp:DataList ID="PollDataList" runat="server" onitemdatabound="PollDataList_ItemDataBound">

              <ItemTemplate>

                 <asp:HiddenField ID="PollIDReqHiddenField" Value='<%# Eval("PollID") %>' runat="server" Visible="false" />

                 <asp:Label ID="lblReqQuestionNumber" runat="server" Text='<%# Eval("No of PollQuestion") %>' Font-Bold="true"></asp:Label><br />
                <asp:Label ID="lblRequiredPollQusetion" runat="server" Text='<%# Eval("PollQuestions") %>' Font-Bold="true"></asp:Label>
                <asp:RequiredFieldValidator ID="RequiredFieldValidatorReqPoll" runat="server" ControlToValidate="rdblstRequiredPollOptions"  Display="Dynamic" ErrorMessage="*" ForeColor="Red" ></asp:RequiredFieldValidator>

                <asp:HiddenField ID="HiddenFieldPollOption" runat="server" Value='<%# Eval("PollOptions") %>' Visible="false" />
                <asp:HiddenField ID="HiddenFieldPollType" runat="server" Value='<%# Eval("PollType") %>' Visible="false"/>

                <asp:RadioButtonList ID="rdblstRequiredPollOptions" runat="server" > </asp:RadioButtonList>
                <asp:RadioButtonList ID="rdblstNonRequiredPollOptions" runat="server" > </asp:RadioButtonList>

                <asp:CheckBoxList ID="CheckBoxListMultiple" runat="server" RepeatDirection="Vertical"></asp:CheckBoxList>                

              </ItemTemplate>

              <FooterTemplate> 
                <asp:Button ID="btnSubmitPoll" runat="server" Text="Submit" CssClass="custom-button" OnClick="btnSubmitPoll_click" />   
              </FooterTemplate>

      </asp:DataList>   
    </div>

Datalist Item bound Code:

    protected void PollDataList_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        //Debugger.Break();
        try
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                System.Data.DataRowView drv = (System.Data.DataRowView) e.Item.DataItem);

                string strPollID = drv.Row["PollID"].ToString();
                string pollOptions = drv.Row["PollOptions"].ToString();
                string strPollType = drv.Row["PollType"].ToString();
                string strPollRequiredorNot = drv.Row["RequiredPoll"].ToString();

                if (strPollType == "RadioButtonList")
                {
                    if (strPollRequiredorNot == "Required")
                    {
                        RadioButtonList rbl = (RadioButtonList)e.Item.FindControl("rdblstRequiredPollOptions");

                        foreach (string opt in pollOptions.Split('}'))
                        {
                            rbl.Items.Add(opt.ToString());
                        }
                        //RequiredFieldValidator rfv = new RequiredFieldValidator();
                        //rfv.ID = "reqfield";
                        //rfv.ControlToValidate = rbl.ID;
                        //rfv.ErrorMessage = "*";

                        RequiredFieldValidator rfvRadioButtonList = (RequiredFieldValidator)e.Item.FindControl("RequiredFieldValidatorReqPoll");
                        rfvRadioButtonList.ControlToValidate = rbl.ID;

                    }
                    else
                    {
                        RadioButtonList rbl = (RadioButtonList)e.Item.FindControl("rdblstNonRequiredPollOptions");

                        foreach (string opt in pollOptions.Split('}'))
                        {
                            rbl.Items.Add(opt.ToString());
                        }
                    }

                }

                else if (strPollType == "CheckBoxList")
                {
                    CheckBoxList chkList = (CheckBoxList)e.Item.FindControl("CheckBoxListMultiple");

                    foreach (string opt in pollOptions.Split('}'))
                    {
                        chkList.Items.Add(opt.ToString());
                        chkList.RepeatDirection = RepeatDirection.Vertical;
                    }
                    if (strPollRequiredorNot == "Required")
                    {
                        //CustomValidators.RequiredFieldValidatorForCheckBoxLists rfvCheckBoxList = (CustomValidators.RequiredFieldValidatorForCheckBoxLists)e.Item.FindControl("RequiredFieldValidatorForCheckBoxLists1");
                        //rfvCheckBoxList.ControlToValidate = chkList.ID;

                    }
                }

            }
        }
        catch (Exception ex)
        {

        }
    }
4

1 回答 1

0

在您的 PollDataList_ItemDataBound 中,您迭代您的 items ,并使用 condition 设置Enabled验证器的属性

//禁用你的验证器

var validator = (RequiredFieldValidator )e.Item.FindControl("RequiredFieldValidatorReqPoll");
validator.Enabled=false;

//使能够

var validator = (RequiredFieldValidator )e.Item.FindControl("RequiredFieldValidatorReqPoll");
validator.Enabled=true;
于 2012-09-08T15:38:27.167 回答