user1686630
user1686630

Reputation: 109

NullReferenceException in web part

I created a web part and there are five configurations: in the usercontrol.ascx, I get the values by the following code:

namespace tasks_email.tasks_email_webpart
{
    public partial class tasks_email_webpartUserControl : UserControl
    {

        public tasks_email_webpart WebPart { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
        }
 protected void btn_send_id_Click(object sender, EventArgs e)
        {

            string subject = " ";
            subject = this.WebPart.SUBJECT as string;
            string emailAddrS = " ";
            emailAddrS = this.WebPart.EMAILADDR as string;
            string checkout_changes = " ";
            checkout_changes = this.WebPart.CHECKOUTLISTSNAMES as string;
            SendCheckout("[email protected]", subject, "this is a project test");

But when I clicked the button, it said: null reference exception, the variable cannot get the SUBJECT value no matter what stuff I editted the configuration

Can any body tell me how to handle that?

*I checked the webpart.cs, I did write like:

    namespace tasks_email.tasks_email_webpart
{
    [ToolboxItemAttribute(false)]
    public class tasks_email_webpart : Microsoft.SharePoint.WebPartPages.WebPart
    {

        [WebBrowsable(true), Category("Configurations"), Personalizable(PersonalizationScope.Shared), WebDisplayName("Subject")]
        public string SUBJECT { get; set; }

in ascx I created a button with the method:

<asp:Button ID="btn_send_id" runat="server" Text=" Email_changes " 
onclick="btn_send_id_Click" CssClass="Search_Submit" onclientclick="return checkna()" 
    />

the error report:

[NullReferenceException: Object reference not set to an instance of an object.]
   tasks_email.tasks_email_webpart.tasks_email_webpartUserControl.btn_send_id_Click(Object sender, EventArgs e) +375
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +114
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +139
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +28
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2980

Upvotes: 2

Views: 1097

Answers (2)

Joakim
Joakim

Reputation: 114

A better way would be to add SUBJECT, EMAILADDR and CHECKOUTLISTSNAMES as public properties in the usercontrol like this:

public string Subject {get;set;}

And in the web part, where you instantiate the user control, you write:

protected override void CreateChildControls()
{
    var control = (tasks_email_webpartUserControl) Page.LoadControl(_ascxPath);
    control.Subject = this.SUBJECT;
}

By doing this, you still set the subject as a web part property but you pass the data to the usercontrol instead of trying to get the data from the usercontrol.

Upvotes: 0

Gregor Primar
Gregor Primar

Reputation: 6805

When you are developing SP2010 visual web parts you should always inherit from Microsoft.SharePoint.WebPartPages.WebPart, so your part would look something like this:

[ToolboxItemAttribute(false)]
public class MyWebPart : Microsoft.SharePoint.WebPartPages.WebPart
{

    [Personalizable(), WebBrowsable, Category("GPWF Settings")]
    public string WebClientUrl { get; set; }

}

Because you are inheriting from UserControl you always get null reference on properties.

So if you don't set your props first you should modify your code like this:

    string subject = this.WebPart.SUBJECT as string;
    string emailAddrS = this.WebPart.EMAILADDR as string;
    string checkout_changes = this.WebPart.CHECKOUTLISTSNAMES as string; 

Upvotes: 1

Related Questions