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

时间:2016-05-01 15:27:31

标签: c# validation onchange

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

让我说我有这种形式;

<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

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

那么可以这样做,在下拉列表中进行onchange时对inputfields添加验证吗?

请指出正确的方向! :)

1 个答案:

答案 0 :(得分:0)

最后我找到了解决问题的方法。 很简单,我可以补充一下。

<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>

我在theanswer文本框中添加了必填字段验证器,并添加了Enabled =&#34; false&#34;然后,我使用javascript跟踪onchange事件,看看用户是否选择了Yes,以及是否启用了requiredfieldvalidator。

在我的问题中,我有一个Radiobuttonlist(你完成了吗?),但由于其他原因改为DropdownList,但我不能认为如果你有radiobutton列表这是不可能的。

好吧,它不在代码隐藏中,但它有效。 我确实尝试过这样的代码隐藏,但它确实让用户友好,可以在选择更改时进行回发。

如果某人对代码隐藏方法感兴趣,我会这样做,并且它有效但是(在我看来不是那么用户友好)

在我的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;
   }
}