Web Forms :: Server Control Rendering Transformed By Xslt?
Jun 8, 2010I would like to create a Server Control that change its view by a XSLT.
Something like:
<cc1:MySC ...> myXslt </cc1...>
Do you have tutorial?
I would like to create a Server Control that change its view by a XSLT.
Something like:
<cc1:MySC ...> myXslt </cc1...>
Do you have tutorial?
Im using the ASP.NET Xml control and want to pass it a url to a rss feed and a stylesheet - so that i can style the rss myself on my website. When applying the full web path to the xml control [URL] i get an exception telling me that the document source is not a valid virtual path. What am i doing wrong? I would hate to download the file before showing it...
View 1 RepliesI am trying to render the Button control @ serverside with PostBackUrl properties to set to another page ""~/page1.aspx". When I click on that button , it still postback to same page , does not postback to "page1.aspx" . I am trying to implement crosspage postback. I don't know button information and postbackurl info at design time. I Only know button and PostbackUrl info @ runtime.Code I am using
protected void Page_Load(object sender, EventArgs e)
{ div1.InnerHtml = GetRenderControl(); }
public
string GetRenderControl()
{ Button buttonAdd = new Button();
[code]...
I am outputting the entire HTML for my server control as follows:
public override void Render(HtmlTextWriter output)
{
output.Write(myStringBuilder.ToString());
}
myStringBuilder is a StringBuilder object that is manually built in a separate private method.Is this an efficient way to do it? Or is it better to pass the HtmlTextWriter to my private method and make multiple calls to HtmlTextWriter.Write()?
I currently have a file "abc.htm" in my Custom Server Control Project and it's Build Action is set to Embedded Resource.Now in the RenderContents(HtmlTextWriter output) method, I need to read that file and render it on the website.I am trying the following but it's to no avail:
protected override void RenderContents(HtmlTextWriter output)
{
var providersURL = Page.ClientScript.GetWebResourceUrl(typeof (OpenIDSel), "OpenIDSelector.Providers.htm");
var fi = new FileInfo(providersURL); // <- exception here
//the remaining code is to possibly render the file
}
This is an example of how the providersURL is:
/WebResource.axd?d=kyU2OiYu6lwshLH4pRUCUmG-pzI4xDC1ii9u032IPWwUzMsFzFHzL3veInwslz8Y0&t=634056587753507131
FileInfo is throwing System.ArgumentException: Illegal characters in path.
I am using two user controls in my page. The controls are loaded dynamically one at a time. I'm just referencing the user controls in the page and loading them dynamically using 'LoadControl()'. Everything is working fine till now and the user can switch the controls one another.
Here the issue I found is eventhough the controls are working as expected and the data is visible, the rendered HTML contains only the first loaded user control's markup.
Even if the current control displayed is 'usercontrol2', the source shows 'usercontrol1' markup. How can I force the page to render 'usercontrol2' markup and remove 'usercontrol1' markup while loading'usercontrol2'?
I am creating custom server control. I have two classes in project. One is main class that render control and another will be used to render content based on condition.I just want to know how to render content from other classes in main class.For example. This isjust an example.My main class code
[Code]....
My TopLeftPane class
[Code]....
My page code on page load event
[Code]....
When I run the page, Header title always getting null. This is a just sample code. I will have more than 20 classes so I dont want to write a code in main class to render whole control.I hope all of you understand my problem.
[Code]....
So far all the XML / XSLT I've worked with takes an XML document and transforms it to a standalone HTML webpage using an XSLT file.
In my web application, I'm using a web service to retrieve the XML document, which I need to render and make human-readable, and then insert that formatted content into a content placeholder in my master page.
The easiest way would be to append the XSLT to the retrieved XML file and link that to the content placeholder, but something tells me I can't just do that.
I took a look at these Stack Overflow pages, but they just want to render the straight XML whereas I want a transformed XML. Also, I need to be able to put it into my master page template.
I have the following code:
XElement Categories =
new XElement("Promotions",
from b in db.GetPromotions()
select new XElement("Promotion",
new XElement ("Category",b.CategoryName),
new XElement("Client",b.ClientName),
new XElement("ID",b.ID),
new XElement("Title",b.Title)));
XDocument mydoc = new XDocument();
mydoc.Add(Categories);
try
{
// Load the style sheet.
XslTransform xslt = new XslTransform();
xslt.Load(@"C:WebDesktopModulesPromotionsTransList.xslt");
// Execute the transform and output the results to a writer.
StringWriter sw = new StringWriter();
//XsltSettings mysettings = new XsltSettings();
XmlWriterSettings mysettings = new XmlWriterSettings();
xslt.Transform(mydoc.CreateReader(),null, sw);
String mstring = sw.ToString();
It generates the following string:
<ul id="red" class="treeview-red" xmlns:asp="http://schemas.microsoft.com/ASPNET/20">
<li><span>Arts & Entertainment</span><ul>
<li><span>Client 1</span><ul>
<li><span><asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkClicked" Text="Get your Free 2" /></span></li>
<li><span><asp:LinkButton ID="LinkButton4" runat="server" OnClick="LinkClicked" Text="Get your Free 4" /></span></li>
<li><span><asp:LinkButton ID="LinkButton5" runat="server" OnClick="LinkClicked" Text="Get your Free 5" /></span></li>
</ul>
</li>
</ul>
</li>
<li><span>Community & Neighborhood</span><ul>
<li><span>Client 2</span><ul>
<li><span><asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkClicked" Text="Get your Free 1" /></span></li>
</ul>
</li>
</ul>
</li>
<li><span>Education</span><ul>
<li><span>Client 3</span><ul>
<li><span><asp:LinkButton ID="LinkButton3" runat="server" OnClick="LinkClicked" Text="Get Your Free 3" /></span></li>
</ul>
</li>
</ul>
</li>
<li><span>Home & Garden</span><ul>
<li><span>Client 4</span><ul>
<li><span><asp:LinkButton ID="LinkButton6" runat="server" OnClick="LinkClicked" Text="Get your Free 6" /></span></li>
</ul>
</li>
</ul>
</li>
</ul>
Now I take the string and add it to a panel which is part of a view in a multiview control: Panel1.Controls.Add(new LiteralControl(mstring)); I have tried to play with Page.ParseControl, but I cannot get it to work right in the panel, the linkbuttons do not show, even though the text is there in the source. Now I tried this: Control myctrl = Page.ParseControl(mstring); Panel1.Controls.Add(myctrl); and I get this as the one of the controls:
a id="dnn_ctr954_ViewPromotions_LinkButton2" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("dnn$ctr954$ViewPromotions$LinkButton2", "", true, "", "", false, true))">Get your Free 2</a>
It doesn't work the way expected, dotnetnuke is doing some nutty stuff here using the parse control. it seems to drop my LinkClicked event.
I have a simple HttpHandler that generates a dynamic image based on query string parameters and a custom web control that renders an image tag pointing to the handler as its 'src' attribute. All works fine when run in the web server, but at design timethe control displays as the "missing image" icon (red x in a box). The handler is registered in the web.config with a ".ashx" extension. The RenderContents method in the control looks like this:
output.AddAttribute("src", ResolveUrl(string.Format("~/Sparklines.SparkHandler.ashx?stype=pm&w={0}&h={1}&sv={2}&ev={3}&cv={4}&sc={5}&ec={6}&mc={7}&gs={8}",
Width.IsEmpty ? 100 : Width.Value,
Height.IsEmpty ? 15 : Height.Value,
caleStart, ScaleEnd, CurrentValue,
ColorUtils.ColorString(StartColor, true),
[code]...
I was wondering if there's a way in Umbraco to log errors that we get when it fails to load xslt or user-controls. Generally it shows a red box saying it couldn't load the control and stuff. Is there a way to properly log this?
View 1 RepliesI am testing my website in numerous browers and have discovered (amazingly) that the asp:menu
control does not render properly in both the above browsers! Given that these browsers must account for
a large part of internet traffic it is curious that microsoft have not fixed this. I have looked at CSS Friendly but
if looks like a lot of work and change for my websites just for the one control that does not work.
I am developing website using xmlhttp request.I am using treeview control in a webpage.I am sending xmlhttp request to page for adding a treenode to treeview control.I added a node in the treeview control and i render the treeview control html using control.render method and send html to client through without postback.But i am not able to maintain the state of treeview control like selected node and expanded nodes.So I want to send state info to server through xmlhttp and how to update the state info in server,aslo i need to update the treeview control javascript objects like treeview_data which maintains the treeview state when i return back from server.
View 1 Replieswhy the following code bombs with a NullReference exception.
[Code]....
I just want to output the html for the menu control to a string, if I remove the line that adds the new menu item or I change the control to a calander control instead of a menu control the it works fine.
I am having a problem with rendering a menu control inside a server control. I am getting an error in the RenderContents override method when I try to render the Menu Control. The error I am getting is an Object Reference error. The code is below...
[Code]....
I've encountered was appears to be a strange bug with the menu control, and alas, I am unable to find much useful information on it (which leads me to believe I have something installed or confingured incorrectly). Here the problem:
When declaring a menu control with a staticHoverStyle, for example:
<asp:Menu
ID="navMenu"
DataSourceID="srcSiteMap" [code]....
Has no effect on the behavior of the control once it's rendered, neither in Firefox nor IE.In fact, using the source code at
http://msdn.microsoft.com/en-us/library/ms366731.aspx with no modifications also results in the hoverstyle not working.
This problem seems to be "fixed" if you specify the css attribute declaratively, for example, StaticMenuItemStyle-BackColor="Yellow".
Alternatively, if you specify RenderingMode="table" then the hoverstyle seems to work. It's only when you're using a cssclass with a list that things seem to mess up.
Finally, I notice that in the rendered html, the control embeds some styles between /* <![CDATA[ */ and /* ]]> */ comments that affects the final appearance of the menu control, sometimes overwriting a cssclass you specified (ex: the margin for dynamic menus can only be controlled with the HorizontalOffset property, and not by css). This is undesirable, but I don't see anything that seems to overwrite the behavior of hover elements. Actually, the .hoveritem class doesn't appear anywhere in the markup at all, but when you specify the StaticMenuItemStyle-BackColor property, then the value is rendered correctly in this block of styles.
I have a user control with a datagrid and few other information on title and summary. I would like to render this control to an Excel file !
The problem is , as soon as i try to open the rendered xls file, Excel reports an error, that the file extension is not valid, and that it is not from a trusted resource.
Two separate questions, but sufficiently intertwined that I'm going to try the two together....
Firstly - User Controls and Behaviours
I have a User Control which contains a few visual controls. I am attaching some behaviours by using GetScriptDescriptors and am passing some JavaScript to the browser using GetScriptReferences. That is all rock solid and working well. However, when developing, I did discover that I couldn't attach the ehaviours to the User Control itself - not surprising as rendering a User Control does not create a DOM element which represents the actual control. So, I have attached my behaviours to a "random" TextBox within the User Control.
So - first question, is there a better way to do that? For example, should I always be rendering a SPAN as an element to surround the control? Not sure what that would do to the robustness of the rendering. What is the right way to attach a behaviour to a User Control.
Secondly - Accessing those same Behaviours later
Assume I have placed a User Control on the page. That User Control exposes a Property (actually a Javascript Function of course) which does "something" to the control - for the sake of example we'll say that the function is set_Border(colour). I then have a behaviour on the same page (actually an Extender on a different control) which needs to call the function. I have a reference to the User Control in my script, so I have tried TheControlReference.set_Border('red') and find that my control doesn't support the set_Border method.
I guess this is probably because the behaviours are not attached to the User Control itself, but to a GUI element within it. Hence, I suspect that the answer to the second question lies within the answer to the first.
I have a custom control that renders different controls based on a property value. This all works correctly until i try and add a rating control to the control. When i render both controls in the CreateChildControls the control is rendered properly.
However when i try to add layout by overriding the RenderContents method and rendering controls there, an error is generated
Extender controls may not be registered after PreRender.The code shows both methods of creating the controls.
[Code]....
VB, .net 4.0, VS 2010. All of the sudden all of my button controls aren't rendering properly. They are in places on the form that make no sense. If I change the button control to any other control name such as an image button, they format corrrectly.
View 2 RepliesI have an Image control with the ImageUrl property set to point to an image on a network folder, the address looks like this:
\fs01PRODUCTSimagesAM101.jpg
It renders correctly in IE but not in Firefox.
pasting the url/path directly into the browser, the address is maintained in IE: \fs01PRODUCTSimagesAM101.jpg
But in Firefox, it is converted to this: file://///fs01/PRODUCTS/images/AM101.jpg
I suspect this is related to the problem.
Server side event of UserControl not executing while rendering in Page
View 3 RepliesI hate tables - don't want to use tables, unless I have tabular data to display. A menu is not tabular data (as far as I am concerned.) I was elated to see that in asp.net 4 - the menu control renders as a <ul> <li>, instead of as a table. However - try as I might, I can not get a horizontally orientated Menu to split into even columns, and text align center. FYI - I don't use fixed width - so I can't just set a width to 1000 - and separate it into even columns. Besides that, I want it to change width dynamically, based on the number of "columns (menuItems)" there are. Is it possible to spread out the <li> menu items evenly across the space I provide for them in their containing div or will I have to quite using menu controls, and start using JQuery Menu's?
View 2 RepliesI've defined node styles for my TreeView instance in markup (using <LevelStyles> for example). Everything renders correctly in IE7/8 but, when rendering in Chrome, Safari or FireFox, the styles are not being applied. From looking at the source code for the page, I can see that the various runtime css classes are being injected into the top of the page, but the class attributes on the <a> tags (within the generated TreeView HTML) are empty (class=""). In IE, the class attributes contain references to the classes that were injected into the page.
Can anyone explain why this is happening? I can see no logical explanation for this, and it's a big issue - My client primarily uses Safari, as they're Mac based.