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 = "§ion=" + 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
Post a Comment