asp.net - Can't add to null build error -


thakns on im baffled. it's throwing null when user control trying reference placeholder on itself.

the error

i'm getting error:

((contentplaceholder)page.master.findcontrol("javascriptincludes")).controls.add(jsincludes); system.argumentnullexception: value cannot null. 

this being thrown web user control. null value here jsincludes control i'm trying add. exists in web user control though! if break down to:

literal newlit = new literal(); newlit.text = "testing"; jsincludes.controls.add(newlit); 

i get:

system.nullreferenceexception: object reference not set instance of object. jsincludes.controls.add(newlit); 

it's in web.config under controls as:

<add tagprefix="scirra" src="~/controls/article/articlesubmitform.ascx" tagname="articlesubmitform"/> 

master page

    snip     <script src="<%=resolveclienturl("~/js/scrollto-min.js")%>"></script>      <asp:contentplaceholder id="javascriptincludes" runat="server"></asp:contentplaceholder> </form>      </body>  </html> 

content page

my tutorial page:

<%@ page language="c#" autoeventwireup="true" codefile="tutorials.aspx.cs" inherits="tutorials" masterpagefile="masterpages/main.master" %> <%@ mastertype virtualpath="~/masterpages/main.master" %> <%@ reference control="~/controls/article/articlesubmitform.ascx" %>  <asp:content id="content1" contentplaceholderid="maincontent" runat="server">   <asp:placeholder runat="server" id="defaultview" visible="false">      <div class="center">         <h1>tutorials</h1><br />     </div>  </asp:placeholder> <asp:placeholder runat="server" id="submitview" visible="false">      <div class="center">         <h1>submit tutorial</h1><br />     </div>      <asp:placeholder runat="server" id="articlesubbmitter" />      </asp:placeholder>  </asp:content>  using system; using system.collections.generic; using system.linq; using system.web; using system.web.ui; using system.web.ui.webcontrols;  public partial class tutorials : system.web.ui.page {     protected void page_load(object sender, eventargs e)     {         string section = request.querystring["section"];          if (section == "submit")         {             // menu selection             master.settopmenuselected("tut");             master.setsubmenuselected("submit");              // page meta data             page.title = meta.tutorial_submit_title + meta.title_suffix; ;             master.addmetadescription(meta.tutotial_submit_description);              // canonicial meta link             string thispageurl = settings.masterdomainroot + "/tutorials/submit";             master.addcanonical(thispageurl);             submitview.visible = true;              // forced tags input             controls_articlesubmitform submitform = new controls_articlesubmitform();             submitform.forcedtags = new string[] { "tutorials" };             submitform.section = "tutorials";             submitform.thisuser = master.thisuser;             articlesubbmitter.controls.add(submitform);                     }         else         {             // menu selection             master.settopmenuselected("tut");             master.setsubmenuselected("home");              // page meta data             page.title = meta.tutorial_title + meta.title_suffix; ;             master.addmetadescription(meta.tutorial_description);              // canonicial meta link             string thispageurl = settings.masterdomainroot + "/tutorials";             master.addcanonical(thispageurl);              defaultview.visible = true;         }       } } 

my control

and control itself:

<%@ control language="c#" autoeventwireup="true" codefile="articlesubmitform.ascx.cs" inherits="controls_articlesubmitform" %>   <div class="article-edit-wrapper"> <h3>title</h3> <asp:textbox runat="server" id="articletitle" cssclass="nice-textbox wide" maxlength="65" /><br /><br />  <h3>body</h3> <asp:textbox runat="server" id="articleinput" cssclass="article-edit-area" textmode="multiline" />  <div id="draftnotice" style="float:left"></div> <div style="float:right">auto preview <input type="checkbox" checked="checked" id="autopreview" onchange="updatepv(this)" /></div> <div class="clear"></div><br />  <h3>preview</h3> <div id="previewarea" class="article-preview"></div>  <br /> <h3>tags</h3> <scirra:tagentry runat="server" id="taginput" />  <br /><asp:button runat="server" id="submitbutton" cssclass="nice-button" text="submit" />  </div>  <asp:placeholder runat="server" id="cssincludes">     <link rel="stylesheet" href="<%=resolveclienturl("~/css/article.css")%>" />  </asp:placeholder> <asp:placeholder runat="server" id="jsincludes">      <script src="<%=resolveclienturl("~/js/fieldselect.js")%>"></script>      <script src="<%=resolveclienturl("~/js/kbshortcuts.js")%>"></script>      <script src="<%=resolveclienturl("~/js/articlecommon.js")%>"></script>      <script>         var articleajaxurl = "<%=resolveclienturl("~/handlers/articlesajaxhandler.ashx")%>";         var section = "<%=section%>";     </script>     <script>         // called when edit area modified         function updatepreview() {              if (autopreview) {                  // relevent items                 var previewarea = $('#previewarea');                 var inputtxt = $('textarea#articleinput').val();                  // update preview                 previewarea.html(formatinput(inputtxt));              }         }          var r = 1;         shortcut.add("ctrl+h", function () {             performshortcut("[", "][" + (r++) + "]", "enter link description");         });          // function called save draft         var lastsavedtitle = "";         var lastsavedbody = "";         function savedraft() {              var body = $.trim($('textarea#articleinput').val());             var title = $.trim($('#articletitle').val());              if ((body.length > 0 || title.length > 0) && (lastsavedtitle != title || lastsavedbody != body)) {                  // build data                 var datastring =    "&section=" + section +                                     "&body=" + body +                                     "&title=" + title;                 lastsavedtitle = title;                 lastsavedbody = body;                  // post                 $.ajax({                     type: 'post',                     url: articleajaxurl + "?action=savedraft",                     data: datastring,                     success: (function (data) {                          var splitd = data.split("|");                         $('#draftnotice').html(splitd[1]);                         $('#draftnotice').fadeout('slow', function () {});                      })                 });               }         }         setinterval(savedraft, 2000);          // formats input html         function formatinput(text) {              // newlines breaks             text = text.replace(new regexp("\n", "g"), '<br />')              // **bold**             text = text.replace(new regexp("\\*\\*(.+?)\\*\\*", "g"), '<strong>$1</strong>');              // *italic*             text = text.replace(new regexp("\\*(.+?)\\*", "g"), '<em>$1</em>');              // ##header 1##             text = text.replace(new regexp("##(.+?)##", "g"), '<h2>$1</h2>');              // #header 2##             text = text.replace(new regexp("#(.+?)#", "g"), '<h3>$1</h3>');              // relpace trailing breaks after header close tags             text = text.replace(new regexp("</h2>(\<br \/\>)*", "g"), "</h2><br />");             text = text.replace(new regexp("</h3>(\<br \/\>)*", "g"), "</h2><br />");              // youtube             text = text.replace(new regexp("\\[tube:(.+?)\\]", "gi"), "<object type=\"application/x-shockwave-flash\" class=\"youtube-embed\" data=\"http://www.youtube.com/v/$1\"><param name=\"movie\" value=\"http://www.youtube.com/v/$1\" /></object>");             text = text.replace(new regexp("</object>(\<br \/\>)*", "g"), "</object><br /><br />");              // insert title             var title = $.trim($('#articletitle').val());             if(title.length > 0)                 text = "<h1>" + title + "</h1><br />" + text;              return text;         }     </script>  </asp:placeholder>  using system; using system.collections.generic; using system.linq; using system.web; using system.web.ui; using system.web.ui.webcontrols;  public partial class controls_articlesubmitform : system.web.ui.usercontrol {     public string[] forcedtags { get; set; }     public string section { get; set; }     public loggedinuser thisuser { get; set; }      protected void page_load(object sender, eventargs e)     {         // include css/js          ((contentplaceholder)page.master.findcontrol("javascriptincludes")).controls.add(jsincludes);         ((contentplaceholder)page.master.findcontrol("headcontent")).controls.add(cssincludes);          // initialise edit area         articleinput.attributes.add("onkeyup", "updatepreview()");         articleinput.attributes.add("onchange", "updatepreview()");         articletitle.attributes.add("onkeyup", "updatepreview()");         articletitle.attributes.add("onchange", "updatepreview()");          // forced tags         taginput.defaulttaglist = this.forcedtags;          // load draft if 1 exists         using (dataclassesdatacontext db = new dataclassesdatacontext())         {             var q = (from d in db.tbldrafts d.section == this.section && d.userid == thisuser.userid select new { d.title, d.draft }).singleordefault();             if (q != null)             {                 articletitle.text = q.title;                 articleinput.text = q.draft;             }         }     } } 

this troubling me, fixed it.

controls_articlesubmitform submitform =       loadcontrol("~/controls/article/articlesubmitform.ascx") controls_articlesubmitform; 

you can't programatically new mycontrol() apparently.


Comments