I'm working with ASP.NET and VB.NET.
I have a page which contains 5 user controls.
The page itself does nothing, it just presents the user controls to the user.
The user controls work fine when I come on the page, or when I refresh, but when I go to another page, and press 'Back' only two of my user controls shows up, and they don't work like they're supposed to!
Short description of the controls:
2 controls which look if the user has to create something and shows an option to do so. (goes to the DB)
2 controls show an overview if needed (goes to the DB)
1 control looks if the user is an admin (does not go to the DB, but looks in the securityContext)
So what happens is:
the first 3 controls don't show up
1 control shows his default state (although depending on the user it shouldn't)
the admin control always shows the admin link, even if the user isn't an admin
I've tried looking at caching (disabling, enabling), I've tried cheating the viewstate, I've tried using a placeholder, page_init, ..
Nothing seems to work though, and I'd like this to actually work, 'cause I'm pretty sure users will do this a lot. When I refresh everything works like it should again, because the server gets contacted again..
What should I do? :/
Some code:
<pm:MenuA ID="MenuA" runat="server" />
<pmm:MultiStepMenuA ID="MultiStepMenuA" runat="server" />
<rm:MenuB ID="MenuB" runat="server" />
<mm:MenuC ID="MenuC" runat="server" />
<br />
<am:AdminMenu ID="AdminMenu" runat="server" />
IMPORTANT UPDATE: I don't have this problem with Firefox, only IE9 :/
Blame internet explorer..
Apparently it kept on using an older version of my website "to improve speeds". I removed my history, and I unchecked the "Preserve favorite website data".
After that it worked. The older page was gone, and it was replaced by a newer version.
Thanks anyway, I hope this can help somebody else!
The easiest solution for this problem is to add the following directive at the top of the page to prevent IE or IIS from caching this page:
<%# OutputCache location="None" %>
You can apply this setting globally to all pages by adding the following to the system.web portion of your web.config:
<caching>
<outputCache enableOutputCache="false" enableFragmentCache="false" omitVaryStar="true" />
</caching>
Related
I have an asp button that looks like this:
Default.aspx
<asp:button id="button1" runat="server" Text="clickme" onclick="function" />
Default.aspx.cs
protected void function(object sender EventArgs e)
{
// Do some calculation
}
However, whenever I press the button, the entire page gets refreshed. I have looked on this site and found many solutions, but none of them really works for my project. Here are some of the suggested solutions:
set onclick="return false;" // but then how do I run the function in the code-behind?
use !IsPostBack in Page_Load // but the page still refreshes completely. I don't want Page_Load to be called at all.
Disable AutoEventWireup. // making this true or false doesn't make a difference.
Does anyone have a solution to this, or is it really impossible?
I would place the control inside of an Update panel.
To do so, you would also need a script manager above it, so something like this:
<asp:ScriptManager runat="server" ID="sm">
</asp:ScriptManager>
<asp:updatepanel runat="server">
<ContentTemplate>
<asp:button id="button1" runat="server" Text="clickme" onclick="function" />
</ContentTemplate>
</asp:updatepanel>
if a control inside the update panel does a postback, it will only reload the part of the page inside of the upate panel.Here is a link you may find useful from the MSDN site.
I think there is a fundamental misunderstanding here of how ASP.Net works.
When a user first requests your page, an instance of your Page class is created. The ASP.Net framework runs through the page lifecycle with this page instance in order to generate html. The html response is then sent to the user's browser. When the browser receives the response it renders the page for the user. Here's the key: by the time rendering is complete, your page class instance was probably already collected by the .Net garbage collector. It's gone, never to be seen again.
From here on out, everything your page does that needs to run on the server, including your method, is the result of an entirely new http request from the browser. The user clicks the button, a new http request is posted to the web server, the entire page lifecycle runs again, from beginning to end, with a brand new instance of the page class, and an entirely new response is sent to the browser to be re-rendered from scratch. That's how ASP.Net (and pretty much any other web-based technology) works at its core.
Fortunately, there are some things you can do to get around this. One option is to put most of your current Page_Load code into an if (!IsPostBack) { } block. Another option is to set up your method with the [WebMethod] attribute and make an ajax request to the method from the button. Other options include calling web services from custom javascript and ASP.Net UpdatePanel controls.
What works best will depend on what other things are on the page that user might have changed.
That is normal behavior for asp.net, you are actually causing a postback of the the page in order for the associated event to be called on the server.
I would suggest working with update panels but if you just need something to happen on the backend without it causing any major change on the web page, I would use jquery and a web service. The main reason for me is that update panels create huge viewstate objects.
Have a look here for asp.net ajax : http://www.asp.net/ajax
And here for an example of jquery and wcf : http://www.codeproject.com/Articles/132809/Calling-WCF-Services-using-jQuery
I have a similar problem. this answer helps me a lot. in your asp button.<asp:button id="button1" runat="server" Text="clickme" OnClientClick="return SomeMethod();" /> and in the SomeMethod which is a js method do your logic like manipulating your page then return false as the mentioned answer suggest.
I am using the Login control. Just in FireFox, I am finding that I cannot click directly on the UserName field. I need to tab through all the other elements on that page. Just wondering if there is a work around to this issue?
<asp:Login ID="LoginUser" runat="server" EnableViewState="false" RenderOuterTable="false" OnLoggedIn="LoginUser_LoggedIn">
You can do this by adding the following code to the Page_Load method on your login page:
AppLogin.Focus();
this.Form.DefaultButton = "ctl00$BodyPlaceHolder$AppLogin$LoginButton";
This will also cause the "login" button to be clicked when you click enter.
Note: The full "path" (ctl100$BodyPlaceHolder...) may vary slightly depending on whether or not you're using master pages, panels, etc. You can simply view the element on the page in your favorite inspector and find the rendered name for the login button.
More details can be found at my blog here.
I was thinking to do this server side, but what i was wanting to do was disable the telerik control called the "Editor." Located at the site: telerick editor control.
My reasoning behind this was that I wanted to give a user the exact look and feel of the object while having everything disabled. I didnt want to use an image at all because it would be stretched, shrank, clicked, etc and wanted to maintain how the editor would look. I had an alternate option i COULD do but not only it would be ineffecient, but have holes to open up for injection.
Looking through the API for that i didnt see which way to accomplish that.
I was thinking to do jquery maybe on the client side to disable, but why do that when you can set the item itself be flagged as disabled and never be entirely sent to the client.
Thoughts? Ideas? How would you go about it? I didnt see methods or attributes that really led to what i was doing.
You can just set enabled="false" on the radEditor declaration in your aspx page:
http://www.telerik.com/help/aspnet-ajax/editor-disabling-radeditor.html
<telerik:RadEditor runat="server" ID="RadEditor1" Enabled="false">
<Content>
<strong>sample content</strong>
</Content>
</telerik:RadEditor>
On the Server Side you can do
RadEditor1.Enabled = false;
In jquery,
try
$("#RadEditor1").prop('disabled', true);
I have grid on my asp.net page. grid having 3 columns with hyper links. both links working properly. but one is not redirecting desired page. I tried in different browsers as well . but got different error : as
In Mozilla Firefox :The page isn't redirecting properly
description In Mozilla Firefox :
Firefox has detected that the server is redirecting the request for this address in a way that will never complete.
* This problem can sometimes be caused by disabling or refusing to accept
cookies.
In Google chrome : `This webpage has a redirect loop`
description In Google chrome :
The webpage at http://myserver:425/(S(c0kr2xuftxiwhm25cm4vjg45))/mypage.aspx?type=2&userId=8 has resulted in too many redirects. Clearing your cookies for this site or allowing third-party cookies may fix the problem. If not, it is possibly a server configuration issue and not a problem with your computer.
since i tried lot of solutions over net , as i tried cleared cookies from browsers, added
<sessionState
cookieless="false" // True also tried
timeout="10">
</sessionState>
in web config file but problem is same there. I checked link is properly redirecting desired page. I mean i checked spelling of my link it is perfect. what else i have to try to resolve it ? where should i am making mistake ?
<ItemTemplate>
Go to my page
</ItemTemplate>
do check anywhere , are you redirecting same page ? I think you need to check each condition throughly , you must be redirecting same page either with same parameter or with different parameters.
Try adding runat="Server" attribute to the link tag, like this:
<ItemTemplate>
<a runat="Server" ID="linkID" href="mypage.aspx?type=2&userId=<%#Eval("userId") %>">Go to my page </a>
</ItemTemplate>
The most obvious place to check is inside mypage.aspx or mypage.aspx.cs for a redirect (see comment by paolo). The problem is not the link from the grid, this is simply a link.
What happens in this case is that you arrive at mypage.aspx, are redirected to mypage.aspx where you are redirected to mypage.aspx, etc.
You can also try this if you have one field in query string. Here in your case you have userid,
<asp:HyperLinkField HeaderText="Your Header"
DataNavigateUrlFields="userId"
DataTextField="Your Data Field to Display"
HeaderStyle-HorizontalAlign="Center"
DataNavigateUrlFormatString="mypage.aspx?type=2&userId={0}"
ItemStyle-Width="35%"
ItemStyle-HorizontalAlign="Left"
/>
In case of multiple
1) DataNavigateUrlFields="userId, employeeId, departmentid"
2) DataNavigateUrlFormatString="mypage.aspx?type=2&userId={0}&employeeId={1}&deptid={2}"
sequence of 1 and 2 must be same.
I have a gridview that is within an updatepanel for a modal popup I have on a page.
The issue is that the entire page refreshes every time I click an imagebutton that is within my gridview. This causes my entire page to load and since I have grayed out the rest of the page so that the user cannot click on it this is very annoying.
Does any one know what I am missing.
Edit: I entered a better solution at the bottom
Make sure you have the following set on the UpdatePanel:
ChildrenAsTriggers=false and UpdateMode=Conditional
do you have ChildrenAsTriggers="false" on the UpdatePanel?
Are there any javascript errors on the page?
I had this problem and came across the following article:
http://bloggingabout.net/blogs/rick/archive/2008/04/02/linkbutton-inside-updatepanel-results-in-full-postback-updatepanel-not-triggered.aspx
My button wasn't dynamically created in the code like in this example, but when I checked the code in the aspx sure enough it was missing an ID property. On adding the ID the postback became asynchronous and started to behave as expected.
So, in summary, check your button has an ID!
Are you testing in Firefox or IE? We have a similar issue where the entire page refreshes in Firefox (but not IE). To get around it we use a hidden asp:button with the useSubmitBehavior="false" set.
<asp:Button ID="btnRefresh" runat="server" OnClick="btnRefresh_Click" Style="display: none" UseSubmitBehavior="false" />
Several months later this problem was fixed. The project I was working in was a previous v1.1 which was converted with 2.0. However, in the web.config this line remained:
<xhtmlConformance mode="Legacy"/>
When it was commented out all of the bugs that we seemed to have with the ajax control toolkit disappeared
Is the Modal Window popped up using the IE Modal window? Or is it a DIV that you are showing?
If it is an IE Modal Pop up you need to ensure you have
<base target="_self" />
To make sure the post back are to the modal page.
If it is a DIV make sure you have your XHTML correct or it might not know what to update.
I would leave the onClick and set it as the trigger for the updatePanel.
That's odd that it works in FF and not IE. That is opposite from the behavior we experience.
UpdatePanels can be sensitive to malformed HTML. Do a View Source from your browser and run it through something like the W3C validator to look for anything weird (unclosed div or table being the usual suspects)
If you use Firefox, there's a HTML validator Extension/AddOn available that works quite nicely.
For reference..
I've also noticed, when using the dreaded <asp:UpdatePanel ... /> and <asp:LinkButton ... />, that as well as UpdateMode="Conditional" on the UpdatePanel the following other changes are required:
ViewStateMode="Enabled" is required on <asp:Content ... /> (I've set it to Disabled in the MasterPage)
ClientIDMode="Static" had to be removed from <%# Page ... />
To prevent post-backs add return false to the onclick event.
button.attribute.add("onclick","return false;");
Sample:
string PopupURL = Common.GetAppPopupPath() + "Popups/StockChart.aspx?s=" + symbol;
hlLargeChart.Attributes.Add("onclick", String.Format("ShowPopupStdControls(PCStockChartWindow,'{0}');return false;", PopupURL));