I have created two partial classes for a web page.
Now i have given a defination of one function say submit() that i m calling at OnSubmit event of button.
But this function is not being called, the program doesnot compiles as it is not able to search the defination of function, which was defined in another partial class. Is it possible to call this function or i have to give defination of function in same file where i m calling it
eg
<%@ Page Language="C#" MasterPageFile="~/Master Pages/LeftMenu.master" AutoEventWireup="true" CodeFile="Registration.aspx.cs" Inherits="Web_Pages_Authentication_Login_Management_Registration" Title="Registration" StylesheetTheme="Default Theme 1" %>
Registration.aspx.cs
public partial class Web_Pages_Authentication_Login_Management_Registration : System.Web.UI.Page
{
private string firstName;
private string lastName;
private string userName;
private string userPassword;
private string primaryEmail;
protected void btnSubmit_Click(object sender, EventArgs e)
{
Display();
}
}
Registration_Database.cs
public partial class Web_Pages_Authentication_Login_Management_Registration
{
const string dbFirstName = "@FirstName";
const string dbLastName = "@LastName";
const string dbUserName= "@UserName";
const string dbUserPassword = "@UserPassword";
const string dbPrimaryEmail = "@PrimaryEmail";
void Display()
{
firstName="XYZ"; //This variable is not accessible when i put both files in different directories
}
}
I am getting following error
Error 1 'Web_Pages_Authentication_Login_Management_Registration' does not contain a definition for 'Display' and no extension method 'Display' accepting a first argument of type 'Web_Pages_Authentication_Login_Management_Registration' could be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\Administrator\Desktop\Online Test\Web Pages\Authentication\Login Management\Registration.aspx.cs 78 20 C:\...\Online Test\
Registration.aspx, Registration.aspx.cs, Registration_Database.cs are three files that are not in App_Code folder but belongs to one folder only out of which Registration.aspx.cs, Registration_Database.cs are partial classes and Registration.aspx is my design file. Plz let me know if u want to know some more info about my problem
I am not using DLL Files. No precompiled code
Similar to a partial class, a partial method can be used as a definition in one part while another part can be the implementation. If there is no implementation of the partial method then the method and its calls are removed at compile time. Compiler compiles all parts of a partial method to a single method.
The partial keyword indicates that other parts of the class, struct, or interface can be defined in the namespace. All the parts must use the partial keyword. All the parts must be available at compile time to form the final type. All the parts must have the same accessibility, such as public , private , and so on.
Different parts of a class or struct may inherit from different interfaces. If any part is declared abstract, then the whole class, interface or struct is considered abstract. If any part is declared sealed, then the whole whole class, interface or struct is considered sealed.
Inheritance cannot be applied to partial classes.
I think the problem you're experiencing is because your website is dynamically compiled, rather than a precompiled web application.
When the ASP.NET page is first accessed, the compiler will only look in the code behind file, and won't search all the other .cs files for possible extra code for the same class. Thus, it will never see the implementation of display()
, which in turn causes the code behind file to fail to compile.
I would certainly not use a method like this for what you seem to want to do, but you could define a custom class that derives from System.Web.UI.Page
and have your actual page derive from the new class. The class definition would have to be in App_Code
for a dynamically compiled website.
Registration.aspx.cs:
public partial class Web_Pages_Authentication_Login_Management_Registration : MyPage
{
protected void btnSubmit_Click(object sender, EventArgs e)
{
Display();
}
}
App_Code\MyPage.cs:
public class MyPage : System.Web.UI.Page
{
protected void Display()
{
// ...
}
}
In any case: you certainly shouldn't use static variables the way you are using them, this will cause problems if multiple people are using your site at the same time. Frankly, your example doesn't make much sense to me. Maybe if we had more information about what you're trying to accomplish, we could provide a best-practise way to do it.
Note that in your example, putting the second file in App_Code
directory will not make it work. That would simply result in two classes with the exact same class name (provided the namespaces match of course). It really doesn't like that :)
Yes, it is possible to call a method on a (partial) class.
Partial classes are only a feature of some languages (such as C#) - they don't exist in IL, as they are compiled together into a single class.
However, it can sometimes be tricky since partial class declarations must be totally identical for this merging to happen. That includes the namespace, so this might be your problem.
As an illustration, this will result in a single class:
namespace MyNamespace
{
public partial class MyClass { }
public partial class MyClass { }
}
Thre resulting class is MyNamespace.MyClass. However, this will result in two different classes:
namespace MyNamespace
{
public partial class MyClass
{
public void MyMethod();
}
}
namespace MyOtherNamespace
{
public partial class MyClass { }
}
This will produce two classes: MyNamespace.MyClass and MyOtherNamespace.MyClass. In this case, a call to this.MyMethod
from MyOtherNamespace.MyClass will not work.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With