Ajax button with no OnClick event is causing a postback - asp.net

I am completely new to Ajax and have had no training. I'm just copying a co-worker's code. We have a page with two Ajax controls: one my co-worker wrote and one I wrote. Everything is working fine except for one item, and my co-worker's up to his eyeballs in another project, so I need to figure this out. The problem is that the Ajax control I wrote pops up a ListBox with two buttons: Close and Select. The Select button has an OnClick event and causes a postback, as is expected. However, the Close button does not have an OnClick event and still causes a postback. This is not the case with a very similar Ajax control that my co-worker wrote that sits on the same page. The code is below. My co-worker's code involves the Email Template; mine involves the Email(s) Lookup. For the life of me, I don't see any difference. Can anyone tell me why my Close button causes a PostBack and my co-worker's doesn't?
<!--my co-worker's control-->
<tr>
<td width="20%"><br /><div class="formtext">Email Template:</div></td>
<td colspan="3"><br />
<asp:Button ID="btn_ShowTemplate" runat="server"
Text="View/Edit Template" />
<ajax:ModalPopupExtender ID="mpTemplate" runat="server" PopupControlID="panelTemplate" TargetControlID="btn_ShowTemplate"
CancelControlID="BtnTemplateClose" BackgroundCssClass="modalBackground">
</ajax:ModalPopupExtender>
<asp:Panel ID="panelTemplate" runat="server" CssClass="modalPopupTemplate" align="center">
<div class="formtext_modal">Litigation Hold Email Template <img src="images/v2/modal_email.png" alt="Email" /><br /></div>
<cc1:Editor ID="TemplateEditor" runat="server" Width="675px" Height="400px" />
<br />
<asp:Button ID="BtnTemplateClose" runat="server" Text="Close" CssClass="btnMatterClose" />
<asp:Button ID="btnTemplateSave" runat="server" Text="Save" CssClass="btnMatterSelect" OnClick="btnTemplateSave_Click" />
</asp:Panel></td>
</tr>
<!--my control-->
<tr>
<!-- email cc section -->
<td>Email CC:<br /></td>
<td colspan="3"><asp:Button ID="btnEmails" runat="server" Text="Lookup Email" /> <asp:TextBox
ID="tbEmails" runat="server" Width="80%" ReadOnly="true"></asp:TextBox><br />
<ajax:ModalPopupExtender ID="mpEmails" runat="server" PopupControlID="panelEmails" TargetControlID="btnEmails"
CancelControlID="btnClose" BackgroundCssClass="modalBackground">
</ajax:ModalPopupExtender>
<asp:Panel ID="panelEmails" runat="server" CssClass="modalPopupAttorneys" align="center">
<table align="center" width="100%">
<tr>
<td>
<div class="formtext_modal">Email(s) Lookup <img src="images/v2/modal_search.png" alt="Search" /></div><br />
<asp:Label ID="Label3" runat="server" Width="600px" CssClass="formtext"
Text="Add Employees to Email CC line"></asp:Label>
<div style="BORDER: thin solid; OVERFLOW: auto; WIDTH: 600px; HEIGHT: 140px">
<asp:CheckBoxList ID="cblEmails" runat="server" Width="600px" Height="140px" SelectionMode="Multiple">
</asp:CheckBoxList>
</div>
</td>
</tr>

Server side buttons always cause a post back. One way to get around it is to add a client click function that returns false.
OnClientClick="return false;"
Edit
Your co-worker has defined the CancelControlID="BtnTemplateClose" on the ModalPopupExtender. That is what is repressing the post back. You also have the CancelControlID defined, but I can't find the close button (btnClose) anywhere in the code you have posted. Where are the close buttons in your control? If you make sure your close button has the ID btnClose, it would most likely work like your co-worker's close button.

Related

Asp.Net button causing Error 500 - Internal Server Error

I have a program that reads book info from a database and creates a shopping cart program. It runs fine locally but whenever I test it on my site, I get an Error 500 - Internal Server Error. I've found out that if I comment out the asp:button in the code below, the program works but the button is necessary. The Button3_Click function exists in the code behind. Any ideas?
<div id="book3" class="books" style="width: 170px; height: 351px; float:left;">
<asp:Image ID="Image3" runat="server" Height="196px" Width="169px" ImageUrl="url/ofMiceandMen.jpg" />
<br />
<div style="height: 135px">
<asp:Label ID="title" runat="server" Text="Of Mice and Men"></asp:Label>
<asp:Label ID="author" runat="server" Text="John Steinbeck"></asp:Label>
<asp:Label ID="review" runat="server" Text="4.5/5 Stars"></asp:Label>
<asp:Label ID="price" runat="server" Text="$7.00"></asp:Label>
<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="View Book" />
//This Button
</div>
</div>
This is what the server tells me when I specify for detailed debug info.
Detailed Error Information:
Module: ManagedPipelineHandler
Notification: MapRequestHandler
Handler: PageHandlerFactory-Integrated-4.0
Error Code 0x00000000
I encountered the same error and I researched but found a lot of answers that did not fix it. Here are my solution steps
If the page is a html page, add a form tag with an id and runat inside the <body> tags
<form id="form1" runat="server">
<div>
<!--Add your button -->
</div>
</form>
and possibly add a <div></div> inside the <form> tags

How to disable future date in ajax calendarextender

I have an user control in AJAX for the date calendar and I want to disable the future dates in the Calendar. I have tried to do it by using the Maximum Value property but that doesn't disables the control.
Any suggestions or help?
<%# Control Language="C#" AutoEventWireup="true" CodeFile="usrCtrlDatePicker.ascx.cs" Inherits="UserControls_usrCtrlDatePicker" %>
<table cellspacing="0" cellpadding="0" border="0" style="height:18px;">
<tr>
<td style="text-align:center; vertical-align:middle; height:16px">
<asp:TextBox ID="txtDateEntry" runat="server" Width="75px" MaxLength="1" style="text-align:justify"/>
<img alt="" id="btnShowCalendar" runat="server" src="../images/calendar.gif" style="margin-left:-4px; margin-bottom:-3px; height:17px; width:17px;" />
<ajax:MaskedEditExtender ID="meeDateEntry" runat="server"
TargetControlID="txtDateEntry"
Mask="99/99/9999"
MessageValidatorTip="false"
CultureName="en-US"
OnFocusCssClass="MaskedEditFocus"
OnInvalidCssClass="MaskedEditError"
MaskType="Date"
ErrorTooltipEnabled="false" />
<ajax:MaskedEditValidator ID="mevDateEntry" runat="server" ControlExtender="meeDateEntry" ControlToValidate="txtDateEntry" Display="Dynamic" EmptyValueBlurredText="*" EmptyValueMessage="Date is required" InvalidValueBlurredMessage="*" InvalidValueMessage="Date is invalid" IsValidEmpty="false" MaximumValueBlurredMessage="sjdfhsdfh" MaximumValueMessage="Maximum Value Exceeded." TooltipMessage="" ValidationExpression="(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d" ValidationGroup="" />
<ajax:CalendarExtender ID="ceDateEntry" runat="server"
Format="MM/dd/yyyy"
TargetControlID="txtDateEntry"
PopupButtonID="btnShowCalendar" />
</td>
</tr>
</table>
You can use OnClientDateSelectionChanged event. Refer this.
I want to disable the future dates in the Asp.net ajax calendar extender
By setting the EndDate property of calendar extender you can achieve this required functionality or by using css class. css class technique is given below in the second link
For reference please check the following links, In the second link it uses css class to disable future dates.
Disable Future and Past Date
Disable Future Dates in ASP.Net AJAX

Spell checker not checking for capital letters

Following is my code for ASPX page:
<td colspan="2">
<asp:TextBox ID="txtMessageBody" runat="server" Rows="8" TextMode="MultiLine" Width="1180px"
CssClass="Label" />
<igspc:WebSpellChecker ID="wscSpellCheck" runat="server" TextComponentId="txtMessageBody" ButtonId="btnCcheck">
<DialogOptions ShowNoErrorsMessage="true" />
</igspc:WebSpellChecker>
<div runat="server" id="divSpecllCheck">
<input type="button" id="btnCcheck" value="Spell Check" />
</div>
</td>
I am not able to check the spelling of the all the upper case letters ..In other wise If i enter CTA for CAT its saying there are no matching words found for it
Set SpellOptions.PerformanceOptions.AllowCapitalizedWords to False. The updated markup for the WebSpellChecker:
<ig_spell:WebSpellChecker ID="wscSpellCheck" runat="server" TextComponentId="txtMessageBody" ButtonId="btnCcheck">
<SpellOptions>
<PerformanceOptions AllowCapitalizedWords="False"/>
</SpellOptions>
<DialogOptions ShowNoErrorsMessage="true" />
</ig_spell:WebSpellChecker>
For more details see the PerformanceOptions Class Members in the NetAdvantage API documentation.

ASP.Net Refresh GridView

Afternoon All,
I am using a visual studio 2010. I have a web page which is used to record minutes of meetings. The page has a section that the user can use to add 'Actions' to the site. I can get a user to successfully add an action to the page.
The issue that i have is i also have a grid view on the webpage and would like this to refresh once the user has added the new 'Action' to the page. So that the user can see that its been submitted.
Im new ish to the .net environment and VB and im not sure 100% how to complete this task.
I have the following code from my .aspx page....
Submitted Actions:
<hr />
<!-- DataSource for submitted Actions -->
<asp:SqlDataSource ID="OutstandingActionsDS" runat="server"
ConnectionString="<%$ ConnectionStrings:SMCConnectionString %>"
SelectCommand="Populate_grdOutstandingActions"
SelectCommandType="StoredProcedure"></asp:SqlDataSource>
<!-- Gridview that holds submitted Actions -->
<asp:GridView ID="GridView1" runat="server" DataSourceID="OutstandingActionsDS">
</asp:GridView>
<br />
<br />
New Actions to Record:
<hr />
<!-- Add new Action -->
<asp:Panel ID="pnlHeaderAction" runat="server" CssClass="pnl" Width="740px">
<div style="float:left;">
Record New Actions
</div>
<div style="float:right;">
<asp:Label ID="lblShowHideAction" runat="server" ></asp:Label>
</div>
<div style="clear:both"></div>
</asp:Panel>
<asp:Panel ID="pnlInfoAction" runat="server" CssClass="pnlBody">
<table>
<tr>
<td style="width:498px; height: 15px;"><h5>Actions:</h5></td>
<td style="width:130px; height: 15px;"><h5>Owner:</h5></td>
<td style="height: 15px;"><h5> Target Date:</h5></td>
</tr>
</table>
<table style="width: 99%">
<tr>
<td style="width: 495px">
<asp:TextBox ID="txtAction" runat="server" TextMode="MultiLine"
Width="493px" Height="50px" style="font-family:Verdana"></asp:TextBox>
</td>
<td style="width: 132px" valign="top">
<asp:TextBox ID="txtOwner" runat="server" Height="50px"
width="128px" style="font-family:Verdana"></asp:TextBox>
</td>
<td valign="top">
<asp:TextBox ID="txtTargetDate" runat="server" width="89px" style="font-family:Verdana"></asp:TextBox>
</td>
</tr>
</table>
<br />
<div style="text-align: right;">
<asp:Button ID="btnAddAction" runat="server" Text="Add New Action" CssClass="button" />
</div>
</asp:Panel>
Here is my code for the VB page...
Protected Sub btnAddAction_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAddAction.Click
Dim oActionClass As New ActionClass
With oActionClass
.Action = txtAction.Text
.Owner = txtOwner.Text
.TargetDate = New SmartDate(Convert.ToDateTime(txtTargetDate.Text))
oActionClass.ActionID = ActionClassDAL.AddActionClass(oActionClass)
ClearActions()
End With
End Sub
Private Sub ClearActions()
txtAction.Text = ""
txtOwner.Text = ""
txtTargetDate.Text = ""
End Sub
This seems like a simple request but i cant seem to find anything that shows me how to refresh the grid based on the user adding the action to the system.
Many thanks in advance for any help offered.
Regards
Betty
you just have to put a databind to the GridView1. I think is something like this:
me.GridView1.databind();
On the bottom of your method btnAddAction_Click.
I hope I have been helpful.

ASP.Net: label control in panel not updating

I have an ASP panel with a modalpopupextender attached to it that is shown dynamically. Within the panel there are two labels that are dynamically populated with text when the panel popup is shown. however, when it is shown the labels are blank (missing). Below is my code for the HTML markup and code behind:
HTML MARKUP
<asp:Panel ID="pnlalert" runat="server" CssClass="modal">
<div class="rel">
<div class="modal-inner-wrapper-alert rounded-corners">
<div class="content rounded-corners">
<div class="body">
<div class="popuppanel">
<div class="popupGnrl-Alert">
<asp:Label ID="alerttitle" runat="server" Text=""></asp:Label><br />
<asp:Label ID="alertlabel" runat="server" Text=""></asp:Label>
<asp:HiddenField ID="section" runat="server" />
<asp:HiddenField ID="violation" runat="server" />
</div>
<div class="popupGnrl-Alert" style="text-align:center;">
<asp:Button ID="cmdMaxAlertOk" runat="server" Text="Yes" Width="50px"
onclick="cmdMaxAlertOk_Click" /> <asp:Button ID="cmdMaxAlertCancel"
runat="server" Text="No" Width="50px" onclick="cmdMaxAlertCancel_Click" />
</div>
</div>
</div>
</div>
</div>
</div>
</asp:Panel>
<asp:ModalPopupExtender ID="mpealert" runat="server" TargetControlID="popuplnk" PopupControlID="pnlalert" >
</asp:ModalPopupExtender>
ASP.NET Code Behind
this.mpealert.Show();
this.alerttitle.Text = "Submission time exceeded";
this.alertlabel.Text = "This expense was incurred greater than 3 months ago and is therefore outside of the normal claim period. Do you still wish to proceed? NOTE: expense may be rejected by Finance.";
What could be causing the labels not to show?
Are you setting the text of the labels in the button event which shows the modal popup extender?
If so, the "show" event is probably being handled client side and your server side text setting code is probably never being called.
Wrap your modalpopupextender in an UpdatePanel and set it's Update condition to Always.
The above answer did not work for me. If we keep the panel inside an update panel and call the update method on update panel, then the contents get updated.

Resources