Working with dropdown list & Validation in asp.net - asp.net

I have got a dropdown list populated with products from a product table. I have a button named ADD Product, so when the user wants to add a new product instead of selecting product from the drop down list, one should click on add new then panel 1 should show which includes a textbox. Panel1 visibility is set to false by default and it should be visible when the user clicks on the button. Also I want a validation on dropdown list and textbox(if panel is visible). Below is the code which is not working :
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
<%--<asp:TextBox ID="txtMake" runat="server" CssClass="txtStyle"></asp:TextBox>--%>
<asp:Button ID="btnAdd" runat="server" />
<asp:Panel ID="panel1" Visible="false" runat="server"><asp:TextBox ID="txtAddnew"></asp:TextBox></asp:Panel>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="Please Select a Product" ValidationGroup="insert" ControlToValidate="DropDownList1" ForeColor="Red"></asp:RequiredFieldValidator><br />
codebehind:
protected void btnAdd_Click(object sender, EventArgs e)
{
panel1.Visible = true;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
MultiView1.ActiveViewIndex = 0;
DropDownList1.DataSource = caravans.GetProductNames();
DropDownList1.DataBind();
}
}

You can use this concept for validation on dropdownlist. I am given you an example please check this...
<asp:DropDownList runat="server" ID="ddl">
<asp:ListItem Value="-1" Text="Select"></asp:ListItem>
<asp:ListItem Value="1" Text="One"></asp:ListItem>
<asp:ListItem Value="2" Text="Two"></asp:ListItem>
</asp:DropDownList>
<asp:RegularExpressionValidator ID="reg1" runat="server" ControlToValidate="ddl"
Display="Dynamic" ErrorMessage="Select Proper" SetFocusOnError="true" Text="Select Proper"
ValidationGroup="check" ValidationExpression="^\d{0,5}$" />
<asp:Button ID="btn" runat="server" ValidationGroup="check" Text="Submit" />

Related

Dropdown item select change event

I have dropdownlist1 containing items 2wheeler, 3wheeler.
If I select 2 wheeler dropdownlist2 should be open with items gear and non gear.
if I select gear I want to open textbox to write bike model name.
else if I select non gear I want to open just label.
Your design page:
<asp:DropDownList ID="ddl1" runat="server" OnSelectedIndexChanged="ShowDDL2" />
<asp:DropDownList ID="ddl2" runat="server" OnSelectedIndexChanged="ShowControls" Visible="false" />
<asp:TextBox ID="TextBox1" runat="server" Visible="false" />
<asp:TextBox ID="TextBox2" runat="server" Visible="false" />
<asp:Label ID="Label1" runat="server" Visible="false" />
<asp:Label ID="Label2" runat="server" Visible="false" />
Your code behind:
protected void ShowDDL2(object sender, EventArgs e){
ddl2.Visible = true;
}
protected void ShowControls(object sender, EventArgs e){
TextBox1.Visible = TextBox2.Visible = Label1.Visible = Label2.Visible = true;
}
Is this what you need? But I don't see a logic in this...

AutoPost capture what caused it.

I have the following code in my .aspx file:
<asp:TextBox ID="txtSearch" runat="server" Width="278px"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" Text="Search" AutoPostBack="true" />
When I click on the btnSearch button it does an AutoPostBack.
What my goal is that if btnSearch was clicked, I would then capture the value of txtSearch or else I would not
How do I code such that if btnSearch was clicked on AutoPost I can flag it.
First, a Button does not have an AutoPostBack property. It posts back always.
Second, you can simply handle it's Click event and read the txtSearch.Text property:
<asp:TextBox ID="txtSearch" runat="server" Width="278px"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" />
codebehind:
protected void btnSearch_Click(Object sender, EventArgs e)
{
string search = txtSearch.Text;
// ...
}

How to send extra parameter on SelectedIndexChanged?

Is there any way to send extra parameter to SelectedIndexChanged function?
<asp:RadioButtonList
ID="rblMeetingPlace"
SelectedValue = '<%# Bind("intMtgLoc") %>'
*OnSelectedIndexChanged = "Validate('txtMeetPlaceOther')"*
runat="server"
RepeatDirection="Horizontal"
>
<asp:ListItem Value="1">Workshop</asp:ListItem>
<asp:ListItem Value="2">Service provider agency</asp:ListItem>
<asp:ListItem Value="3">Advocacy organization</asp:ListItem>
<asp:ListItem Value="4">Public Space</asp:ListItem>
<asp:ListItem Value="5">Other (specify): </asp:ListItem>
<asp:ListItem Value="" Text="" style="display: none" />
</asp:RadioButtonList>
<asp:TextBox ID="txtMeetPlaceOther" Text='<%# Bind("strMtgLocOth") %>'
runat="server" />
I have couple of radiobuttonlist and I want to enable the textboxes when "Other" is selected.
I am thinking of sending the textbox's id to enable it.
Any idea?
You can easily do it this way:
<asp:radiobuttonlist id="rbl1" runat="server"
RepeatDirection="Horizontal"
AutopostBack="true"
SelectedValue='<%# Bind("intMtgLoc") %>'
OnselectedIndexChanged="rbl1_SelectedIndexChanged">
<asp:ListItem Value="1">Workshop</asp:ListItem>
<asp:ListItem Value="2">Service provider agency</asp:ListItem>
<asp:ListItem Value="3">Advocacy organization</asp:ListItem>
<asp:ListItem Value="4">Public Space</asp:ListItem>
<asp:ListItem Value="5">Other (specify): </asp:ListItem>
<asp:ListItem Value="" Text="" style="display:none" />
</asp:radiobuttonlist>
<asp:textbox id="txtMeetPlaceOther" text='<%# Bind("strMtgLocOth") %>' runat="server" />
<asp:textbox id="TextBox1" enabled="false" runat="server"></asp:textbox>
<asp:textbox id="TextBox2" enabled="false" runat="server"></asp:textbox>
and in code-behind:
protected void rbl1_SelectedIndexChanged(object sender, EventArgs e)
{
*yourValidatorName*.Validate();
if (Convert.ToInt32(rbl1.SelectedValue) == 5)
{
TextBox1.Enabled = true;
TextBox2.Enabled = true;
}
else
{
TextBox1.Enabled = false;
TextBox2.Enabled = false;
}
}
reply to comment:
First of all you should set OnSelectedIndexChanged for all RadioButtonLists event handlers. Here - rbl_SelectedIndexChanged.
Then in code behind:
protected void rbl_SelectedIndexChanged(object sender, EventArgs e)
{
TextBox[] textboxes = new TextBox[] { TextBox1, TextBox2 };//all your textboxes.
RadioButtonList whoCallEvent = sender as RadioButtonList;
string last = whoCallEvent.ID.ToString().Substring(whoCallEvent.ID.ToString().Length - 1, 1);//get the last symbol of object (TextBox) ID, who call event.
int index = Convert.ToInt32(last);
if (Convert.ToInt32(whoCallEvent.SelectedValue) == 5)
{
textboxes[index - 1].Enabled = true;
}
else
{
textboxes[index - 1].Enabled = false;
}
}
But I think this is conceptually wrong to do it this way. The best way is to create rbl_SelectedIndexChanged for all the radioButtonList you have on my page.

RequiredValidation only active when another control contain a value

I have two dropdownlists, if one of them contain a value (not default value, which is empty string), the other should also have a value (like requredvalidator). But if no one has a value the page should validate 'true'.
I cannot solve it with a validation group, because the button that trigger the validation is already triggering other validations.
Could you just use a custom validator control and put your logic in the server side validation method. Keep it in the same validation group.
<asp:CustomValidator ID="valCust" runat="server"
ControlToValidate="ddlControl" ErrorMessage="error Message"
ValidationGroup="Group"
onservervalidate="valCust_ServerValidate" >*</asp:CustomValidator>
code behind
protected void valCust_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = MethodToWorkOutValidation();
}
please check below code snippet.
function EnableDisableValidator() {
var DropDownList1 = document.getElementById('DropDownList1');
var DropDownList2 = document.getElementById('DropDownList2');
var RequiredFieldValidator12 = document.getElementById('RequiredFieldValidator12');
if (DropDownList1.selectedIndex > 0 && DropDownList2.selectedIndex > 0) {
ValidatorEnable(document.getElementById('RequiredFieldValidator12'), true);
}
else {
ValidatorEnable(document.getElementById('RequiredFieldValidator12'), false);
}
}
..........
<asp:DropDownList ID="DropDownList1" runat="server" onchange="EnableDisableValidator();">
<asp:ListItem Text="" Value=""></asp:ListItem>
<asp:ListItem Text="1" Value="1"></asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server" onchange="EnableDisableValidator();">
<asp:ListItem Text="" Value=""></asp:ListItem>
<asp:ListItem Text="1" Value="1"></asp:ListItem>
</asp:DropDownList>
<div style="display: none;">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</div>
<asp:RequiredFieldValidator ID="RequiredFieldValidator12" runat="server" ControlToValidate="TextBox1"
Enabled="false" ErrorMessage="*************" ></asp:RequiredFieldValidator>
Let me know if any concern

Cannot get value of UpdatePanel element

I have a repeater inside an Update Panel. when I click the "Find Books" button repeater is modified according to the query.
What I want is to get the value of the DropDown when I click Add To Cart Button. But I can't get the value, instead the UpdatePanelAnimationExtender runs again. I added another button (TestingButton) inside the Update Panel. The UpdatePanelAnimationExtender runs when I click that button also.
My question is how can restrict the update panel only to the "Find Books" button? and how can I retrieve the value of DropDown outside the update panel? I added UpdateMode to conditional but it also not working.
aspx page
<p>Search by Author</p>
<asp:TextBox ID="txtAuthor" runat="server" Text="" AutoComplete="off" /><br />
<p>Search by Publisher</p>
<asp:TextBox ID="txtPublisher" runat="server" Text="" AutoComplete="off" /><br />
<asp:Button ID="btnFind" runat="server" Text="Find Books" OnClick="BtnFind_Click" />
<br />
<p>Search by Price</p>
<asp:RadioButtonList ID="RadioButtonList1" runat="server">
<asp:ListItem Text="Below Rs. 1000.00"></asp:ListItem>
<asp:ListItem Text="Between Rs. 1001 to 2500"></asp:ListItem>
<asp:ListItem Text="Above Rs. 2501.00"></asp:ListItem>
</asp:RadioButtonList>
<br />
<asp:TextBox ID="txtTest" runat="server"></asp:TextBox>
<asp:Button ID="Button2" runat="server" Text="Button"
onclick="Button1_Click" />
<asp:UpdatePanel ID="udpBooks" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<asp:Button ID="btnTest" runat="server" Text="Testing Button" onclick="Button1_Click" />
<asp:Repeater ID="repBooks" runat="server" DataSourceID="SqlDataSource1"
onitemcommand="repBooks_ItemCommand">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<div id="bookBorder">
<table width="640px" height="70px" border="0">
<tr>
<td width="51%" style="padding-top: -20px">
<span class="title">Description:</span> :
<%# DataBinder.Eval(Container.DataItem, "description")%>
</td>
<td>
<asp:DropDownList ID="DropDownList2" CssClass="dropDown" runat="server" Width="100px">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
</asp:DropDownList>
<br />
<asp:Button ID="btnAddToCart" CssClass="button" runat="server" Text="Add to Cart"
OnClick="BtnAddToCart_Click" />
</td>
</tr>
</table>
</div>
<br />
</ItemTemplate>
</asp:Repeater>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnFind" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdatePanelAnimationExtender ID="upae1" runat="server" TargetControlID="udpBooks">
<Animations>
<OnUpdating>
<Parallel Duration="0">
<EnableAction AnimationTarget="btnFind" Enabled="false" />
<FadeOut MinimumOpacity=".5" />
</Parallel>
</OnUpdating>
<OnUpdated>
<Parallel Duration="0">
<FadeIn MinimumOpacity=".8" />
<EnableAction AnimationTarget="btnFind" Enabled="true" />
</Parallel>
</OnUpdated>
</Animations>
</asp:UpdatePanelAnimationExtender>
Code Behind
public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void SqldsOrderDetails_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
string author = txtAuthor.Text;
string publisher = txtPublisher.Text;
string select = "";
if (author.Equals("") && publisher.Equals(""))
select = "select bookId, ISBN, Title, publisher, author, price, description from dbo.[book]";
else if(author.Equals("") && !publisher.Equals(""))
select = "select bookId, ISBN, Title, publisher, author, price, description from dbo.[book] where publisher=#publisher ";
else if(!author.Equals("") && publisher.Equals(""))
select = "select bookId, ISBN, Title, publisher, author, price, description from dbo.[book] where author=#author";
else if(!author.Equals("") && !publisher.Equals(""))
select = "select bookId, ISBN, Title, publisher, author, price, description from dbo.[book] where author=#author and publisher=#publisher";
SqlDataSource1.SelectCommand = select;
e.Command.Parameters.Add(new SqlParameter("#author", this.txtAuthor.Text));
e.Command.Parameters.Add(new SqlParameter("#publisher", this.txtPublisher.Text));
}
protected void BtnFind_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(2000);
// this.gvOrderDetails.DataBind();
this.repBooks.DataBind();
}
protected void ul_Click(object sender, EventArgs e)
{
Response.Redirect("default.aspx");
}
protected void BtnAddToCart_Click(object sender, EventArgs e)
{
txtTest.Text = "sd";
}
protected void Button1_Click(object sender, EventArgs e)
{
txtTest.Text = "sd";
}
protected void repBooks_ItemCommand(object source, RepeaterCommandEventArgs e)
{
DropDownList d = e.Item.FindControl("DropDownList2") as DropDownList;
txtTest.Text = d.SelectedValue;
Button b= e.Item.FindControl("btnAddToCart") as Button;
b.Text = d.SelectedValue;
}
}
For triggering
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
Some content that needs to be updated here...
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="FindBook" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
as far as the value of DropDown into textbox is concern, you should place textbox in another updatepanel and set its value when user select a value from dropdown by calling update method.

Resources