当下拉更改为特定值时将验证组添加到文本框

Add validation group to textbox when dropdown change to specific value

我有一个带有文本框、单选按钮等的表单,当一个下拉列表更改为特定值时,我希望将验证组附加到某些输入字段。可以吗

假设我有这个表格;

<form>
Name:
      <asp:textbox runat="server" id="nametextbox" ValidationGroup="myvalgroup"/>
      <asp:RequiredFieldValidator id="nametextboxFieldValidator" runat="server" ErrorMessage="Name?" ValidationGroup="myvalgroup" ControlToValidate="nametextbox" />

Gender: <asp:RadioButtonList runat="server" ID="gender" RepeatDirection="Horizontal" ValidationGroup="myvalgroup">
            <asp:ListItem Text="Select gender" Value="" Selected="True"/>
            <asp:ListItem Text="Male" Value="Male"/>
            <asp:ListItem Text="Female" Value="Female"/>
        </asp:RadioButtonList>
        <asp:RequiredFieldValidator id="genderFieldValidator" runat="server" ErrorMessage="Gender?" ValidationGroup="myvalgroup" ControlToValidate="gender" />

The answer to life the universe and everything:
        <asp:textbox runat="server" id="theanswer" />

Are you finished?
      <asp:RadioButtonList runat="server" ID="finished" RepeatDirection="Horizontal" onchange="add-validation-group()" >
            <asp:ListItem Text="Are you done?" Value="" Selected="True"/>
            <asp:ListItem Text="Yes" Value="Yes"/>
            <asp:ListItem Text="No" Value="No"/>
            <asp:ListItem Text="Absolutly not, i need 600 more years to think!" Value="NOT-IN-600-YEARS"/>
      </asp:RadioButtonList>

      <asp:button runat="server" id="submitbutton" />
</form>

代码隐藏

function add-validation-group()
    if (finished.SelectedValue.ToString() == "Yes")
        {
            theanswer.Attributes.Add("ValidationGroup", "myvalgroup"); 
        }
end

好的,所以我的代码隐藏包含所有内容的混合,只是为了展示我想要完成的内容,对于代码混合感到抱歉!

这可以做到吗,在下拉列表上更改时向输入字段添加验证?

请指出正确的方向! :)

我终于找到了解决问题的方法。 很简单我可能会补充。

<script type=text/javascript>
    $(document).ready(function () {
        $("#<%= finished.ClientID %>").change(function () {
            if ($('option:selected', this).text() == 'Yes') {
                ValidatorEnable(document.getElementById('<%=theanswerValidator.ClientID%>'), true);
            }
        });
    });
</script>

<form>
Name:
  <asp:textbox runat="server" id="nametextbox" ValidationGroup="myvalgroup"/>
  <asp:RequiredFieldValidator id="nametextboxFieldValidator" runat="server" ErrorMessage="Name?" ValidationGroup="myvalgroup" ControlToValidate="nametextbox" />

Gender: <asp:RadioButtonList runat="server" ID="gender" RepeatDirection="Horizontal" ValidationGroup="myvalgroup">
        <asp:ListItem Text="Select gender" Value="" Selected="True"/>
        <asp:ListItem Text="Male" Value="Male"/>
        <asp:ListItem Text="Female" Value="Female"/>
    </asp:RadioButtonList>
    <asp:RequiredFieldValidator id="genderFieldValidator" runat="server" ErrorMessage="Gender?" ValidationGroup="myvalgroup" ControlToValidate="gender" />

The answer to life the universe and everything:
    <asp:textbox runat="server" id="theanswer" />
    <asp:RequiredFieldValidator id="theanswerValidator" Enabled="false" runat="server" ErrorMessage="Your answer?" ValidationGroup="myvalgroup" ControlToValidate="theanswer" />

Are you finished?
  <asp:DropDownList runat="server" ID="finished" >
        <asp:ListItem Text="Are you done?" Value="" Selected="True"/>
        <asp:ListItem Text="Yes" Value="Yes"/>
        <asp:ListItem Text="No" Value="No"/>
        <asp:ListItem Text="Absolutly not, i need 600 more years to think!" Value="NOT-IN-600-YEARS"/>
  </asp:DropDownList>

  <asp:button runat="server" id="submitbutton" />
</form>

我在答案文本框中添加了必填字段验证器并添加了 Enabled="false" 然后我使用 javascript 跟踪 onchange 事件以查看用户 select 是否是以及他们是否启用必填字段验证器。

在我的问题中,我有一个单选按钮列表(你完成了吗?),但出于其他原因将其改为下拉列表,但我认为如果你有单选按钮列表这是不可能的。

好的,它不在代码隐藏中,但它可以工作。 我确实尝试过代码隐藏,但在 select 更改时进行回发感觉用户友好。

如果有人对代码隐藏方法感兴趣,我就是这样做的,而且它起作用了,但是(在我看来不是那么用户友好)

在我的 asp:Dropdownlist 我添加了

OnSelectedIndexChanged="finished_SelectedIndexChanged" AutoPostBack="true"

在我的代码隐藏中我添加了这个:

protected void finished_SelectedIndexChanged(object sender, EventArgs e)
{
   DropDownList ddl = (DropDownList)sender;

   if (ddl.SelectedItem.ToString().Equals("Yes"))
   {
      theanswerValidator.Enabled = true;
   }
   else  // If someone selects yes and then regret it and selects no then disable validator again
   {
      theanswerValidator.Enabled = false;
   }
}