I have a form with textbox, radiobutton etc. and would like to have a validationgroup attached to some of the input fields when one dropdown changes to a specific value. Is that possible.
lets say i have this form;
<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>
Codebehind
function add-validation-group()
if (finished.SelectedValue.ToString() == "Yes")
{
theanswer.Attributes.Add("ValidationGroup", "myvalgroup");
}
end
Ok so my codebehind contains a mixup of everything but just to show what i would like to acomplish, sorry for the codemixing!
So can this be done, add validation to inputfields when onchange on a dropdownlist?
Point me in the right direction, please! :)
Finally i found a solution to my question.
Quite simple i might add.
<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>
I added required field validators to theanswer textbox and added Enabled="false" i then track a onchange event with javascript to see if user selects Yes and if they do enable the requiredfieldvalidator.
In my question i had a Radiobuttonlist for the (are you finished?), But changed that to a DropdownList instead for other reasons but i cant think that this is impossible if you have radiobutton list.
OK, it's not in codebehind but it works.
I did try to do it codebehind but it dident feel user friendly to have a Postback on select change.
If someone is intrested in the codebehind method i did it this way, and it worked but (in my opinion not so user friendly)
On my asp:Dropdownlist i added
OnSelectedIndexChanged="finished_SelectedIndexChanged" AutoPostBack="true"
and in my codebehind i added this:
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;
}
}
Related
Hello i am trying to validate dropdownlist as it should not have selected item as "--- Pick One ---" by using compare validator but it's not working. Please can any one guide me. It will be very helpful for me.
My code is :-
enter code here
<asp:DropDownList ID="drpdwn_ImDiv" CssClass="inner-dropdown1" runat="server" DataSourceID="SqlDataSource6" DataTextField="Division" DataValueField="Division" AppendDataBoundItems="true">
<asp:ListItem>--- Pick One ---</asp:ListItem>
</asp:DropDownList>
<br />
<asp:CompareValidator ID="CompareValidator1" ControlToValidate="drpdwn_ImDiv" Type="String" ValueToCompare="--- Pick One ---" CssClass="validator" Font-Size="10px" Operator="NotEqual" runat="server" ErrorMessage="CompareValidator"></asp:CompareValidator>`
try this one
<asp:DropDownList ID="drpdwn_ImDiv" CssClass="inner-dropdown1" runat="server" DataSourceID="SqlDataSource6" DataTextField="Division" DataValueField="Division" AppendDataBoundItems="true">
<asp:ListItem>--- Pick One ---</asp:ListItem>
</asp:DropDownList>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ErrorMessage="Please select" ControlToValidate="drpdwn_ImDiv"
InitialValue="--- Pick One ---"></asp:RequiredFieldValidator>
Start by using a Text and Value property for a ListItem. Then you can use a RequiredFieldValidator to check the empty value of the first ListItem.
<asp:DropDownList ID="drpdwn_ImDiv" runat="server">
<asp:ListItem Text="--- Pick One ---" Value=""></asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="drpdwn_ImDiv"
runat="server" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
I want to make first item of dropdownlist non selectable following is my code.
<asp:DropDownList ID="IssueList" runat="server" Height="24px" Style="margin-left: 0px">
<asp:ListItem>Select One</asp:ListItem>
<asp:ListItem>Bug</asp:ListItem>
<asp:ListItem>Enhancement</asp:ListItem>
<asp:ListItem>Tasks</asp:ListItem>
<asp:ListItem>New Feature</asp:ListItem>
</asp:DropDownList>
Please help me how to do this.
You can also make it disabled in code behind on page load event
protected void Page_Load(object sender, EventArgs e)
{
IssueList.Items[0].Attributes["disabled"] = "disabled";
}
also make your first item selected
<asp:DropDownList ID="IssueList" runat="server" Height="24px" Style="margin-left: 0px">
<asp:ListItem Selected="true" Value="">Select One</asp:ListItem>
<asp:ListItem>Bug</asp:ListItem>
<asp:ListItem>Enhancement</asp:ListItem>
<asp:ListItem>Tasks</asp:ListItem>
<asp:ListItem>New Feature</asp:ListItem>
</asp:DropDownList>
You can add disabled attribte.try with this:
<asp:DropDownList runat="server" ID="id">
<asp:ListItem Text="Test" Value="value" disabled="disabled" />
</asp:DropDownList>
You can add an 'Empty' value item:
<asp:DropDownList ID="IssueList" runat="server" Height="24px" Style="margin-left: 0px">
<asp:ListItem Selected="True"></asp:ListItem>
<asp:ListItem>Select One</asp:ListItem>
<asp:ListItem>Bug</asp:ListItem>
<asp:ListItem>Enhancement</asp:ListItem>
<asp:ListItem>Tasks</asp:ListItem>
<asp:ListItem>New Feature</asp:ListItem>
</asp:DropDownList>
Then you would check for
if (string.IsNullOrEmpty(IssueList.SelectedValue))
You could use attribute as in combination of disabled and selected. may this will help to get resolve your issue.
<asp:ListItem Selected="True" disabled="disabled">Select One</asp:ListItem>
^^^^^^^ ^^^^^^^
So, I have this update panel:
<asp:UpdatePanel runat="server" RenderMode="Inline" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSubmit" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="ddOutcomeType" />
<asp:AsyncPostBackTrigger ControlID="ddOutcomeCode" />
</Triggers>
<ContentTemplate>
<fieldset>
<asp:DropDownList ID="ddOutcomeType" runat="server" AutoPostBack="True"
OnSelectedIndexChanged="ddOutcomeType_OnSelectedIndexChanged">
<asp:ListItem Value="0">Please Select...</asp:ListItem>
<asp:ListItem Value="EDU">Continuing in Education</asp:ListItem>
<asp:ListItem Value="EMP">Paid Employment</asp:ListItem>
<asp:ListItem Value="NPE">Not in Paid Employment</asp:ListItem>
<asp:ListItem Value="GAP">Gap Year</asp:ListItem>
<asp:ListItem Value="OTH">Other</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="ddOutcomeCode" runat="server" DataTextField="COMPDESC"
DataValueField="EBSVALUE"
OnSelectedIndexChanged="ddOutcomeCode_OnSelectedIndexChanged"
AutoPostBack="True" Visible="false" />
<br /><br />
<asp:Label ID="lblDestMessage" runat="server"
Text="Please start typing at least 3 characters of the HE institute
then select from the list (Don't make your own up!)"
Visible="false">
</asp:Label>
<h4 style="align-content:center;">
<asp:Label ID="Label1" runat="server" Text="Comments on Destination">
</asp:Label></h4>
<asp:TextBox ID="txtDestComments" runat="server" Width="70%"></asp:TextBox>
<br />
<asp:RegularExpressionValidator ID="validJust" runat="server"
Display="Dynamic" ControlToValidate="txtDestComments"
ValidationExpression="^([\S\s]{0,249})$" CssClass="label label-danger"
ErrorMessage="Please enter maximum 250 characters"
SetFocusOnError="True">
</asp:RegularExpressionValidator>
<br />
<asp:Button ID="btnSubmit" runat="server" Text="Submit"
CssClass="btn btn-primary" OnClick="btnSubmit_OnClick" />
</fieldset>
</ContentTemplate>
</asp:UpdatePanel>
I Have looked at other questions for the same problem but none of the fixes work for this, i tried putting the button outside of the update panel but then the Hidden Fields that are changed by the dropdown lists dont stay changed outside of the update panels.
Any Help?
You are using UpdateMode property of update panel as UpdateMode="Conditional". Either you have to explicitly use Update() method of update panel in button Click event on server side to update the content inside update panel or remove this UpdateMode property because by default it is set as Always.
Anyone know who to display NO text in a radiobutton item but have a value for each?
Here is my radio button list:
<asp:RadioButtonList ID="rdoD4_1" runat="server" RepeatDirection="Horizontal" Width="407px">
<asp:ListItem>0</asp:ListItem>
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
<asp:ListItem>4</asp:ListItem>
<asp:ListItem>5</asp:ListItem>
<asp:ListItem>6</asp:ListItem>
<asp:ListItem>7</asp:ListItem>
</asp:RadioButtonList>
Problem is that it displays 0,1,2 etc next to each list item - I want to keep the value but show no text - any ideas?
Try explicitly setting the Value and Text attributes.
<asp:RadioButtonList runat="server">
<asp:ListItem Value="1" Text="" runat="server"></asp:ListItem>
<asp:ListItem Value="2" Text="" runat="server"></asp:ListItem>
</asp:RadioButtonList>
To be brief, I need the Textbox with ID="textComments" to only appear when the dropdown option of 'Other' is selected from the dropdown, and then disappear if another selection is made. I could do this with JS but it needs to be in C#.
<asp:DropDownList runat="server" ID="dropEnquiryType" CssClass="dropdownRequestList">
<asp:ListItem Value="Customer Services" Text="Customer Services"></asp:ListItem>
<asp:ListItem Value="Website" Text="Website"></asp:ListItem>
<asp:ListItem Value="Contract" Text="Contract Hire"></asp:ListItem>
<asp:ListItem Value="Other" Text="Other"></asp:ListItem>
</asp:DropDownList>
<asp:label runat="server" ID="lblComments" AssociatedControlID="textComments" CssClass="textLabel">Comments:</asp:label>
<asp:TextBox runat="server" MaxLength="200" TextMode="MultiLine" Columns="40" Rows="4" ID="textComments" Wrap="true" CssClass="textComments"></asp:TextBox>
And help would be greatly appreciated.
Make the DropDownList first AutoPostBack=true
handle it's SelectedIndexChanged-event
Switch visibility of both controls there
aspx:
<asp:DropDownList AutoPostBack="true" OnSelectedIndexChanged="dropEnquiryType_Changed" runat="server" ID="dropEnquiryType" CssClass="dropdownRequestList">
<asp:ListItem Value="Customer Services" Text="Customer Services"></asp:ListItem>
<asp:ListItem Value="Website" Text="Website"></asp:ListItem>
<asp:ListItem Value="Contract" Text="Contract Hire"></asp:ListItem>
<asp:ListItem Value="Other" Text="Other"></asp:ListItem>
</asp:DropDownList>
codebehind:
protected void dropEnquiryType_Changed(Object sender, EventArgs e)
{
lblComments.Visible = dropEnquiryType.SelectedValue == "Other";
textComments.Visible = lblComments.Visible;
}
If you absolutely have to do this within C#, then a simple check in PreRender should be sufficient:
textComments.Visible = (dropEnquiryType.SelectedValue == "Other");
This will also require you to set AutoPostback on dropEnquiryType, though, which uses ... JavaScript!