Asp.Net button causing Error 500 - Internal Server Error - asp.net

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

Related

How to avoid asp:UpdatePanel duplicate my contents?

I'm creating a webpage that refreshes every 5 seconds to show how much order is left. The problem is after it's refreshed, my contents starts to duplicate.
Here, the brief of my problems :
I'm showing :
Order Offline : 1 / Order Online : 0.
After Refresh, it will be :
Order Offline : 11 / Order Online : 00.
I refresh the page with with asp:UpdatePanel Triggers and asp:Timer event
I've tried googling for the answer and mostly I found answers by setting the ViewState to Disabled and also I've tried to change UpdateMode to Conditional
Here is my code's snippets :
<body>
<form id="form1" runat="server">
<asp:ScriptManager runat="server" ID="ScriptManager1" />
<asp:Timer ID="Timer1" runat="server" Interval="5000"></asp:Timer>
<div class="row">
<div class="col-sm-2">
<asp:ImageButton ImageUrl="image.png" Width="170" ID="ClsBtn" runat="server" />
</div>
<div class="col-sm-4" style="text-align: right;">
<span id="date" style="font-size:10px; font-weight: 900;"></span>
<span id="time" style="font-size:10px; font-weight: 900;"></span>
</div>
<div class="col-sm-4" style="text-align: right;">
<asp:UpdatePanel ID="upTQ" runat="server">
<Triggers><asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /></Triggers>
<ContentTemplate>
<span style="font-size: 15px; font-weight: 900;">OFFLINE : <asp:PlaceHolder runat="server" ID="phTotalQueue" /> / ONLINE : <asp:PlaceHolder runat="server" ID="phTotalQueueM" /></span>
</ContentTemplate>
</asp:UpdatePanel>
</div>
and this is my code behind :
phTotalQueue.Controls.Add(New LiteralControl("" & dtTO.Rows(0).Item("TotalOrderOffline") & ""))
phTotalQueueM.Controls.Add(New LiteralControl("" & dtTO2.Rows(0).Item("TotalOrderOnline") & ""))
I expect the output to be Order Offline : 1 / Order Online : 0. with no duplicate contents.
Let's first understand what happens: Your page is generated on the server, sent out to the browser, where it is displayed and then, each time it is being refreshed the server is requested and at that time, a LiteralControl is added to phTotalQueue and phTotalQueueM, respectively. Each time this runs, the controls already existent in phTotalQueue and phTotalQueueM, respectively will remain there, displaying the older values, but a new such control is being generated, displaying the new value besides the older values. I would like to kindly advise you to make sure you have an identifiable LiteralControl in your UpdatePanels, having an ID:
<asp:UpdatePanel ID="upTQ" runat="server">
<Triggers><asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /></Triggers>
<ContentTemplate>
<span style="font-size: 15px; font-weight: 900;">OFFLINE : <asp:PlaceHolder runat="server" ID="phTotalQueue"><asp:Literal ID="phTotalQueueText" runat="server"></asp:Literal>
</asp:PlaceHolder> / ONLINE : <asp:PlaceHolder runat="server" ID="phTotalQueueM"><asp:Literal ID="phTotalQueueMText" runat="server"></asp:Literal></asp:PlaceHolder></span>
</ContentTemplate>
</asp:UpdatePanel>
Now, since you have identifiable LiteralControl instances, let's change the code-behind:
phTotalQueueText.Text = "" & dtTO.Rows(0).Item("TotalOrderOffline") & ""
and
phTotalQueueMText.Text = "" & dtTO2.Rows(0).Item("TotalOrderOnline") & ""
Alternatively you can remove the old controls from your UpdatePanels, or find them and modify their Text attribute, but those are hacky ways and I recommend the usage of identifiable tags.

Required field validator is not working

I have used a required field validator, on click of add Button error message will be displayed but whatever code written on onclick event will be executed even if the field is empty.
<div class="form-group posrel">
<asp:Label ID="Label1" runat="server" AssociatedControlID="txtDept"><i class="fa fa-pencil"></i></asp:Label>
<asp:TextBox runat="server" ID="txtDept" placeholder="Department Name" ValidationGroup="ss1"></asp:TextBox>
<div class="text-right validators">
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ErrorMessage="Department Name" ControlToValidate="txtDept" ValidationGroup="ss1">
</asp:RequiredFieldValidator>
</div>
</div>
Below is the code snippet of add button -
<div class="form-group pull-right">
<asp:LinkButton runat="server" ID="lnkbtnaddept" CssClass="btn btn-primary" ValidationGroup="ss1" OnClick="lnkbtnaddept_Click">
<asp:Label runat="server" Text="Add" ID="lbladddept"></asp:Label>
<i style="margin-left: 10px;" class="fa fa-send"></i>
</asp:LinkButton>
</div>
May be this will help you out:
On link-button click event validate your page.
Page.Validate("validation group");
if(Page.isValid){
// your code logic
}
for more on page validate follow the link
https://msdn.microsoft.com/en-us/library/0ke7bxeh%28v=vs.110%29.aspx
Turn on JS support for the Validator control by adding attribute:
EnableClientScript="True"
It should prevent a post-back until text box is filled.
take your Id of RequiredFieldValidator and update on back end
or .cs page.
Ans RequiredCityName.Update();

Ajax button with no OnClick event is causing a postback

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.

Client ID is not getting generated for asp.net controls

I am writing a simple webform on .net 4.0 framework.
<body>
<form id="form1" runat="server">
<div>
<span>Name</span>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
</div>
<div>
<span>Email</span>
<asp:TextBox ID="txtEmail" EnableViewState="false" runat="server"></asp:TextBox>
</div>
<div>
<asp:Button ID="btnButton" runat="server" Text="Submit" />
</div>
</form>
</body>
Issue is when the form renders on browser, I am not getting ClientID for the server side controls. This is strange for me.
The portion of the markup in the browser is
<div>
<input type="submit" name="btnButton" value="Submit" id="btnButton" />
</div>
Notice there is no clientID.
Edit : Client ID something like 'ctl00$MasterPageBody$ctl00$btnButton2'
The client id of the button is btnButton. The other one "ctl..." is when you have your control inside a masterpage. As a side not: If you don´t wan´t asp.net changing your id:s you can set clientidmode='static'.
ClientID is a server side attribute.
You would see the ClientID on the client as the ID attribute:
id="btnButton"
Client id is calculated on the server, it never gets sent to the client.
You need runat="server" to generate a client ID for the control for the reasons mentioned

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