Jag läste härom dagen om funktionen stringbuilder och jag tyckte att den skulle kunna passa till en funktion som jag har på min sida. Det är så att jag har en ascx-sida som innehåller en text samt några funktioner. Man ska kunna visa den texten i två olika layoter. Utan att man ska behöva skriva texten två ggr, tänkte jag att man skulle kunna göra någonting sånt här: Felet uppstår ju när du försöker sätta in en text som en kontroll... Magnus, Okej, fick det här felmeddelandet när jag körde så där: Magnus, Blir likadant nu, där sidan ska visas står det ASP.text_aspx. Vad kan det bero på? Är det att den läser sidan som en text och inte som en sida? Skumt, blev fel när jag skulle editera mitt inlägg. Så det blev någon slags dubbelpost av en del av inlägget i inlägget. Nä. Det står asp.text_aspx där sidan ska vara, verkar som att den inte vill skriva ut sidan utan bara filnamnet på sidan fast med någon modifiering, eftersom den heter text.aspx. Magnus, Njae, så blir det väl inte? Har kanske fel nu men. Magnus, Magnus: Magnus, Ojdå där hade redan fredrik varit framme.. slarv av mig att inte se att du svarat fredrik ;)En fråga om stringbuilder.
<code>
Dim sb As new StringBuilder()
textControl = LoadControl("text.ascx")
If Request.Querystring("val") = "1" Then
sb.Append("<div id='val1'>")
sb.Append(textControl)
sb.Append("</div>")
Else
sb.Append("<div id='val2'>")
sb.Append(textControl)
sb.Append("</div>")
End If
Dim strVal as String = sb.ToString()
text.Controls.Add(strVal)
</code>
Att man använder sig av en placeholder, som får olika egenskaper beroende vilket val man har gjort.
Jag fick det här felmeddelandet när jag testade:
Value of type 'String' cannot be converted to 'System.Web.UI.Control'.
Går det att fixa på nått sätt? Om inte, finns det någon annan funktion som är ungefär likadan som stringbuilder som man kan använda till det här? Sv: En fråga om stringbuilder.
Testa deklarera en label kontroll eller annat passande och sätt dess egenskap till texten du vill skriva ut.
Mvh,
ThomasSv: En fråga om stringbuilder.
Utöka med följande.
Dim MinTest As Literal
MinText.Text = strVal
text.Controls.Add(MinText)
En <b>Literal</b> representerar en kontrol som används för att visa helt vanlig text på en webbsida. Hoppas det löser sig.
Sv: En fråga om stringbuilder.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 40:
Line 41: Dim MinText As Literal
Line 42: MinText.Text = strVal
Line 43:
Line 44: tex.Controls.Add(MinText)
Testade att skriva as new Literal, då fungerade sidan. Fast där texten ska stå fick jag fram det är ASP.text_ascx. Sv: En fråga om stringbuilder.
Hoppsan.. det underlättar om vi skapar objektet med, något som alla gör lite då och då . Kom nu ihåg att <i>Object reference not set to an instance of an object</i> betyder att du har en referensvariabel som inte pekar på något, dvs är <b>Nothing</b>, så vet du hur du löser det nästa gång.. =)
Dim MinTest As Literal = New Literal()
MinText.Text = strVal
text.Controls.Add(MinText)
Sv: En fråga om stringbuilder.
All kod:
<code>
Protected WithEvents text As System.Web.UI.WebControls.PlaceHolder
private textControl As Control
Dim sb As new StringBuilder()
textControl = LoadControl("text.ascx")
If Request.Querystring("val") = "1" Then
sb.Append("<div id='val1'>")
sb.Append(textControl)
sb.Append("</div>")
Else
sb.Append("<div id='val2'>")
sb.Append(textControl)
sb.Append("</div>")
End If
Dim strVal as String = sb.ToString()
Dim MinText As Literal = New Literal()
MinText.Text = strVal
text.Controls.Add(MinText)
</code>Sv: En fråga om stringbuilder.
Så jag editerar här istället:
Blir likadant nu, där sidan ska visas står det ASP.text_aspx. Vad kan det bero på? Är det att den läser sidan som en text och inte som en sida?
Alltså Är det att den läser sidan som en text, tog bort inte framför :)
Edit: hmm ännu mera skumt, nu fungerar det visst :)Sv: En fråga om stringbuilder.
Sv: En fråga om stringbuilder.
Men du ska inte
text.Controls.Add(MinText)
vara
textControl.Controls.Add(MinText)
eftersom du laddar in din kontroll i en variabel som heter <b>textControl</b> ? =)
Sv: En fråga om stringbuilder.
<code>
Protected WithEvents text As System.Web.UI.WebControls.PlaceHolder
private textControl As Control
Dim sb As new StringBuilder()
textControl = LoadControl("text.ascx")
If Request.Querystring("val") = "1" Then
sb.Append("<div id='val1'>")
sb.Append(textControl) 'här lägger jag inte textControl alltså sidan.
sb.Append("</div>")
Else
sb.Append("<div id='val2'>")
sb.Append(textControl) 'likaså här
sb.Append("</div>")
End If
Dim strVal as String = sb.ToString() 'då finns ju sidan inne i den här strängen
Dim MinText As Literal = New Literal()
MinText.Text = strVal
text.Controls.Add(MinText) 'text är ju namnet på placeholdern och
'den får infromationen som är i MinText.
</code>
Om jag ska ha textControl blir det ju knasigt, väl? Den är ju inte deklarerad som en placeholder. Sv: En fråga om stringbuilder.
Ahh sorry.. självklart.. är jäkligt seg i skallen idag och vill bara att arbetsdagen skall ta slut.. kan inte se vad det är som spökar just nu.. får ta en titt med friska ögon sen..Sv: En fråga om stringbuilder.
Du kan inte lägga till en kontrol i en stringbuilder, om du gör det så anropas kontrollens ToString(), ToString() i det fallet blir namnet på kontrollen, det vill säga: ASP.text_aspx.
För att du ska kunna lägga till din kontrol på sidan så måste du göra det via Controls.Add.
Här är ett exemple, inte det snyggaste men slänge ihop något snabbt för att demonstrera vad jag pratar om:
<code>
Protected WithEvents text As System.Web.UI.WebControls.PlaceHolder
private textControl As Control
private myDiv As LiteralControl
Dim myId As String
textControl = LoadControl("text.ascx")
If Request.Querystring("val") = "1" Then
myId = "val1"
Else
myId = "val2"
End If
Dim myDiv As New LiteralControl("<div id='" & myId & "'>")
Dim myDiv2 As New LiteralControl("</div>")
text.Controls.Add(myDiv)
text.Controls.Add(textControl)
text.Controls.Add(myDiv2)
</code>
/Fredrik Normén NSQUARED2
http://fredrik.nsquared2.comSv: En fråga om stringbuilder.
Hmm ser nu att du försöker stoppa in en kontoll i din stringbuilder.. när du gör detta så stoppar du inte in kontrollen utan du stoppa in .ToString() representationen av det (troligen hela namnet med namespace) .. fokuserade mig på den sista biten och såg inte det tidigare när jag var trött i huvudet.. där har du ditt problem.Sv: En fråga om stringbuilder.