Web Forms :: Setting Properties Within BasePage Class Not Working?
Jan 11, 2010
We are trying to use a BasePage class (which inherits from Page) to populate and set the Meta Keywords and Meta Description Tags. I am using masterpages and below is an example code extract... According to examples on the internet, I could then set this also via the Page Directive using the MetaKeywords and MetaDescription properties, but they do not appear.
I have tried setting the CodeFileBaseClass="MyNamespace.UI.BasePage" but this does not work either. Using debug I can see that the BasePage classes' MetaKeywords and MetaDescription properties are not being set within my content page. I can access the properties but not set them.
I have a MasterPage project which is a class library project (it includes themes, style sheets, menus etc) and all applications use them.
I am using the BasePage concept for dynamically adding title,meta tags and descriptions. This BasePage Class inherits system.UI.Page and the aspx pages in the project inherits the BasePage class.
Now i need to move this BasePage class from my application to the Master Page Project so that all the projects/applications can reuse the same code.
I tried add the basepage.cs in the App_code folder and tried calling it in the page directive like below
<%@ Page Language="C#" MasterPageFile="~/Master/Layout/MasterPage.master" AutoEventWireup="true" CodeBehind="xxxx.aspx.cs" CodeFile="xxxx.aspx.cs" Inherits="xxxx" ValidateRequest="false" EnableEventValidation="false" ViewStateEncryptionMode="Never" CodeFileBaseClass="~/Master/App_Code/BasePage<Page>" Title="Title" Meta_Keywords="xxxx,yyyy,zzzz" Meta_Description="This is a test" %>
But i am getting error
Could not load type '~/Master/App_Code/BasePage<Page>'.
This was working fine till the BasePage class was inside the application. But once i moved it out of the project and added it to the master page project i getting this error.
I want to be able to extend the System.Web.UI.Page class and then easily access those properties from the Markup. I know I can do it from the codebehind, but is it possible from the Markup?
We are using nested master page the master page is seperate class library project and all the other projects refer to them. We wanted to have a basepage class which load title, meta tags and keywords dynamically. It was working fine till it was inside the main project. We wanted the basepage class to be more generic and to have it reside in a single place. So i tried created a seperate class library project but i getting error "Could not load type" ..
How to have the basepage class outside the project?
Is that possible? The reason why am doing this is because I need to parse that variable into a an JQuery function so I wanted JQuery to read that field. Can I Assign that value in base class or I have to do it within default.aspx pageload method?
What cool functionality and methods do you add to your ASP.net BasePage : System.Web.UI.Page classes? Here's something I use for authentication, and I'd like to hear your opinions on this:
protected override void OnPreInit(EventArgs e) { base.OnPreInit(e); // Authentication code omitted... Essentially same as below. if (_RequiresAuthentication && !(IsAuthorized)) { RespondForbidden("You do not have permissions to view this page.", UnauthorizedRedirect); return; } } // This function is overridden in each page subclass and fitted to each page's // own authorization requirements. // This also allows cascading authorization checks, // e.g: User has permission to view page? No - base.IsAuthorized - Is user an admin? protected virtual bool IsAuthorized { get { return true; } }
My BasePage class contains an instance of this class:
public class StatusCodeResponse { public StatusCodeResponse(HttpContext context) { this._context = context; } /// <summary> /// Responds with a specified status code, and if specified - transfers to a page. /// </summary> private void RespondStatusCode(HttpContext context, System.Net.HttpStatusCode status, string message, string transfer) { if (string.IsNullOrEmpty(transfer)) { throw new HttpException((int)status, message); } context.Response.StatusCode = (int)status; context.Response.StatusDescription = message; context.Server.Transfer(transfer); } public void RespondForbidden(string message, string transfer) { RespondStatusCode(this._context, System.Net.HttpStatusCode.Forbidden, message, transfer); } // And a few more like these... }
As a side note, this could be accomplished using extension methods for the HttpResponse object. And another method I find quite handy for parsing querystring int arguments:
public bool ParseId(string field, out int result) { return (int.TryParse(Request.QueryString[field], out result) && result > 0); }
Is there any easy way to set properties of a Page (or UserControl for that matter) from *within itself*?As an example, I have several .aspx pages which inherit from exactly the same code-behind class, but I need to be able to pass different properties to the class to make them do the correct thing for the specific .aspx. The only way I've found to do this is to create the following - which works fine, but doesn't feel right....
<script runat="server"> Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init Me.MyProperty = True End Sub </script>
It would be a much nicer, simplier and easier solution to be able to be able to set MyProperty = True somewhere... is this possible?The option of hard-coding properties within the class for the "parent" page is not going to work for my situation.
i have a WebControl class called ContentFrame that has a Header property and a Content property.
public WebControl Header {get; set;} public WebControl Content {get; set;}
Now let's say that I have form x and ContentFrame is on the form. What I want to do is be able to set the the Header and Content properties during design time in the source
Using the following Webservice definition using aClientArgs as a complex type:
[System.Web.Script.Services.ScriptService] public class Controller : System.Web.Services.WebService { [WebMethod] public void save_client(aClientArgs client) { // Save client data } } Then defining aClientArgs as a sub-class: public class aArgs { public string id = null; public string name = null; } public class aClientArgs : aArgs { public string address = null; public string website = null; } Returns the following WSDL fragment for the save_client args: <save_client xmlns="http://tempuri.org/"> <client> <address>string</address> <website>string</website> </client> </save_client> When I'm expecting the following: <save_client xmlns="http://tempuri.org/"> <client> <id>string</id> <name>string</name> <address>string</address> <website>string</website> </client> </save_client>
So it appears that the .NET WebService is not treating inherited properties as arguments/variables for purposes of a web service. How do I get .NET to also use the properties of the base class?
Property3 and Property4 anre both public properties of the page I am on and the user control
Currently the code complaing about Property3 saying it cannot create an object of Int32 from '<%=Property3%>' and Property4 always gets set to 0 (the default)
I do not wish to use the c# code to set these values as this Plugin will be deployed with a CMS which I have no control over
I have a database which holds the path of an image. It also holds the recomended height and width of the image. My question is how can I set the height and width properties from my database? I have tried the following with no avail:
I have a user control (i.e. ascx) that comprises of two related list boxes (i.e. once you change the selected item in one list the contents of the other list update). I'm adding this user control dynamically to a page on the click event of a button (i.e. using LoadControl).I wish to set the list box datasource properties, as well as the default selected item of the parent list from my parent page so I created public properties in my user control to accomodate this. I also created an event in my user control that notifes the parent page when the selected item changes in one of the list boxes so I can update the contents of the other list box.
I understand that I have to recreate the user control on every postback in order for it to function correctly but I'm not sure exactly how I should be doing it. I've shown below what I have currently - whilst it works the problem is that on postback I'm always creating the user control with all its default properties and then updating the properties that need to change(?). For example, when the choice in theparent list box changes the datasource of the list box is set twice (once in AddControl and then again in OnParentChanged)? As the contents of the list boxes originate in a database it means I'm making unnecessary calls to the database (unless I do some something like store each unique set of data in the ViewState).
I'd be very grateful if someone could review how I've done things and illustrate how perhaps I should be doing things. I'm not sure if the way I've done this is considered the 'correct' way. For example there may be a better way of doing things would avoid setting the properties twice? I'm a bit unsure of the way I've set the datasource properties of the list boxes and bound them. I wished to set the datasource from the parent page because I might have a second user control on my page that may also use the same datasource and I could reuse it (as opposed to each control making its own call to the database) so I'd like to keep this feature if possible.It would be great if posting code in reply that you use my example as a guide so I know what you're referring to.Here's the code for my user control:
eI am using themes to set the Gridview font size and font name. I need to set the boundfield to the same font and size as I want it to be application to all the columns in gridview. How can I specify the boundfield properties in the themes.
Once the template is loaded and cast back to the TabHeader class, it's null. How can I load that control, set the properties, and use it as the template? Or is the only way to go about doing this to create a custom class?
I am in need of some assistance in regards to how to best set the values of properties for a Web User Control which is being included into a cell of a GridView with dynamically created columns. I have tried a few different approaches, but can't seem to get a satisfactory result. Also, to be completely honest, I am not really sure if I am using best practices for what I am trying to accomplish.
First off a little background:I have a GridView for which we will never know the exact number of columns at run time. The columns are predicated by user selection. I am creating the command text for the DataSet on the fly and then looping through the columns of the resulting DataTable in order to use custom TemplateFields. This works ok for just printing out the row values but not so much for when I need to insert the Web User Control into a cell.The Web User Control is in essence a collection of image links which are used as a "Quick Nav" tool. I need to pass the values of 2 fields from each DataRow to the control via properties (for example, CustID and ProductID). I am using custom TemplateField classes inheriting from ITemplate for displaying my fields and extending the DataBinding event like so: [Code]....
This won't work for my User Control as DataBinding is called after the control is loaded into the page and I need the properties to be set before the Page_Load event of the control is fired.Is there a GridView event I should be looking into instead such as RowCreated or RowDataBound? Or should I modify how I loop through the DataTable by doing rows first, then the resulting columns as I've seen done elsewhere?
I have added a static string variable inside a web page with it's class named VersionBase. The class is public, the variable is public, why can't I simply do VersionBase.MyString from anywhere inside the project like I can do with any other class?
Some settings in asp.net like viewstate can be controlled at the site (web.config), page, or control levels. What is the order of precedence? What happens, for example, if I set viewstate of site and page levels but on at the control level?
Also, is viewstate for a control the same as control state? Furthermore, what events to use for loading and saving viewstate for controls (is this the same thing as control state?) and also for custom controls?
Similarly, which events should I use to render controls? Is this PreInit and Load? Is this the same for custom controls?
I want to be able to have the user see the available options when they try to do something such as DateRange = .... (i want intelllisense in here and I can set the values). Is this a possible functionality? I am using VS 2008 .NET 3.5
I'm working on a project that uses a master page. When the page loads I'm calling a class (which I feed and ID into) to get back certain values for a location that the user has selected. Things like town name etc.
On the home page I have a user control which has some statistics for that location too.
Is there a way that I can get the user control to pull values from the class invoked by the Master Page (which has already been fed the ID, hit the db and pulled back the values), rather than creating a new instance of the class within the user control and having to supply the ID and hit the db all over again? This is now I'm calling the class in the masterpage. I have a method "CheckForStoredLocation" that goes off and gets all the data I need.