C# - Rendering Controls Within Template Tag In Custom ServerControl?
Nov 22, 2010I'm working on a custom navigation menu, I've added the following property within my MenuItem class to allow users add them controls into it.
View 1 RepliesI'm working on a custom navigation menu, I've added the following property within my MenuItem class to allow users add them controls into it.
View 1 RepliesI'm trying to write a custom rendering template for use in the DisplayForm of a list whose fields include Title, HeaderImageUrl, Body. I've got the following so far:
<SharePoint:RenderingTemplate ID="NewsListForm" runat="server">
<Template>
<h1><SharePoint:FieldValue FieldName="Title" runat="server"/></h1>
<div>
<p>
<SharePoint:UrlField FieldName="HeaderImageUrl" runat="server"></SharePoint:UrlField>
<SharePoint:RichTextField FieldName="Body" runat="server" />
</p>
</div>
</Template>
</SharePoint:RenderingTemplate>
The HeaderImageUrl field is configured to be an Image URL, but when I use the UrlField control, it renders a link.
I was thinking there might be a way to grab field values and put them in attributes, so something like this:
<asp:Image ImageUrl="<% FieldValue["HeaderImageUrl"] %>" runat="server"/>
If this kind of thing isn't possible, then is there another control in Microsoft.SharePoint.WebControls that would render an image from a URL?
I'm gonna use JQuery files in my custom ServerControl , So I inserted jquery-1.4.3.min.js file into the Solution in JavaScriptFiles Folder. Now, I have to add below line within Head tag whenever a user use this ServerControl.
<script type="text/javascript" src="JavaScriptFiles/jquery-1.4.3.min.js"></script>
How can I do it in ServerControl with C#
How do you go about creating a complex servercontrol frontend?...I can't imagine you do Controls.Add() in the .cs files to add in divs, classes etc Can you embedd an ascx to make it easier to style?
View 5 RepliesI 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]...
Using VS2005, VB code behind, Using Customer Pager Template, in a custom GridView...
View 6 RepliesI 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.
When developing custom controls and using them in ASP.NET, what are the answers to the following?
- What events to use for loading and saving viewstate for controls (is this the same thing as control state?) and also for custom controls?
- Similarly, which events should I use to render controls? Is this PreInit and Load? Is this the same for custom controls?
I am rendering custom control. After rendered the control it dynamically creates one span. how to remove that span. I explained it below
<span id ="CustomControl">
<div id ="CustomControl_CC" runat ="server">
rendering part
</div>
</span>
The bold part only i am rendering how it creating span
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'm reviewing new features of ASP.NET MVC 2.0. During the review i found really interesting using Templated Helpers. As they described it, the primary reason of using them is to provide common way of how some datatypes should be rendered. Now i want to use this way in my project for DateTime datatype My project was written for the MVC 1.0 so generating of editbox is looking like this:
<%= Html.TextBox("BirthDate", Model.BirthDate, new { maxlength = 10, size = 10, @class = "BirthDate-date" })%>
<script type="text/javascript">
$(document).ready(function() {
$(".BirthDate-date").datepicker({ showOn: 'button', buttonImage: '<%=Url.Content("~/images/i_calendar.gif") %>', buttonImageOnly: true });
});
</script>
Now i want to use Template Helper, so i want to have above code once i type next sentence:
<%=Html.EditorFor(f=>f.BirthDate) %>
According to the manual I create DataTime.ascx partial view inside Shared/EditorTemplates folder. I put there above code and stacked with the problem. How can i pass the name of the property that I'm rendering with template helper? As you can see from my example, i really need it, since I'm using the name of the property to specify data value and parameter name that will be send during the POST requsest. Also, I'm using it to generate class name for JS calendar building. I tried to remove my partial class for template helper and made MVC to generate its default behavior. Here what it generated for me:
<input type="text" value="04/29/2010" name="LoanApplicationDays" id="LoanApplicationDays" class="text-box single-line">
As you can see, it used the name of the property for "name" and "id" attributes. This example let me to presume that Template Helper knows about the name of the property. So, there should be some way of how to use it in custom implementation.
I am creatin a server control where some controls are being rendered inside `protected override void Render(HtmlTextWriter writer)`
writer.AddAttribute(HtmlTextWriterAttribute.Type, "button");
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.UniqueID + "butto_Foo1");
writer.AddAttribute(HtmlTextWriterAttribute.Value, "Button1");
writer.RenderBeginTag(HtmlTextWriterTag.Input);
writer.RenderEndTag(); //button
writer.AddAttribute(HtmlTextWriterAttribute.Type, "button");
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.UniqueID + "butto_Foo2");
writer.AddAttribute(HtmlTextWriterAttribute.Value, "Button2");
writer.RenderBeginTag(HtmlTextWriterTag.Input);
writer.RenderEndTag(); //button
This way buttons are rendered on design view as well. The problem is that number of buttons to render is dynamic based on data in xml file (even if the data was static, the number of button is about 12 and I don't think it is wise to copy paste the same code above 6 times...). I thought by using loop for that:
int i = 1;
foreach (Button button in tb.Items)
{
writer.AddAttribute(HtmlTextWriterAttribute.Type, "button");
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.UniqueID + "butto_Foo" + i);
writer.AddAttribute(HtmlTextWriterAttribute.Value, button.ButtonValue);
writer.RenderBeginTag(HtmlTextWriterTag.Input);
writer.RenderEndTag(); //button
i++;
}
tb is defined in OnLoad; On run time it works, but on design time I get error: > Error rendering control. And control is not being rendered.
I have been trying to implement an extended GridView that eventually will include a panel with a number of filter options outside of the grid iteself.
As a test I have added a dropdownlist and a linkbutton but when these are rendered to the page they are rendered as plain HTML with none of the javascript or ids that are generated for server controls as a consequence the postback event is not fired when a dropdownlist item changes and the linkbutton is rendered as plain text.
[Code]....
The method GetDesignTimeHtml of the ControlDesigner class should return html markup that will be shown on the page in design time. My problem is that control looks different in different versions of the visual studio. What is the rendering engine visual studio use to render control in design mode?
View 2 RepliesI'm working on a Navigation Menu. I've created below ServerControl and it works, but I want to allow users adding some standard ASP.NET controls within my ServerControl Tags like label, image and so on.
<MdsMenu:ServerControlMenu ID="ServerControlMenu1" runat="server">
<MdsMenu:animation AnimationSpeed="Normal" AnimationType="Opacity_Height" Delay="1000" DropShadow="true" />
<!-- HERE HAS TO HAVE SOME STANDARD ASP.NET CONTROLS -->
<!-- e.g <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> -->
</MdsMenu:MenuItem>
</MdsMenu:ServerControlMenu>
My problem is here that how I can get Child Controls within <MdsMenu:MenuItem> and show them like as they are in the output. P.S: I overwrite RenderContents method
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(OutPutStringBuilder.ToString());
}
i create a custom control which can hold some templates, such as Header, Body Footer, etc.
[Code]....
i tried to use smarttags to allow the user to edit each of the templates, which worked pretty well. what i could not get working was to add a template if it has not been in the control. eg. add a header-template to the control above. i tried using the RootDesigner.AddControlToDocument() function of my controldesigner. but this function gives me an error, telling me the control i'm going to add the template (i used a new HtmlGenericControl("HeaderTemplate") as new Control) to is not valid. (i can't give the exact error message, cause i use a german version of visual studio 2008) i've been searching the web for nearly half a day now, but i did'nt find a working solution for my problem.
I have a GridView with custom pager template. I use SqlDataSource with a dynamically generated select query.
To make application faster, I want to select not all records, but as many as fit in a GridView page. But in this case, the pager section doesn't show up. Could anybody suggest how I can fix that? Some people say I should do my own pager template, but I don't know neither how to make it, nor how to use it.
I saw some CustomControls using a separated ascx file, it rendered the ascx file (the template) but all the code was in a dll (the control).How can I do that? Can someone post a Hello World example?
View 6 RepliesI have a test page that I am trying to add a custom control (articleWUC.ascx) and set its properties to some results from SQL. I followed several guides including this [URL] with no luck.
My test page includes two data lists one that works without dynamic creation via custom templates and the other using custom templates.
Test.Aspx.CS
[Code]....
Test.aspx
[Code]....
articleWUC.ascx.CS
[Code]....
I have created a custom control that implements Templates (based on Panel controls) ... I can do a FindControl to locate imbedded controls. This allows me to get and set values in the imbedded controls, but I want to be able to reference the imbedded controls like they are properties of the associated panel. Here is a sample of how my custom control now works:
<cc:CustomControl ID="myCustomControl" runat="server">
<PanelTemplate>
<asp:TextBox ID="myTextBox" runat="server"></asp:TextBox>
</PanelTemplate>
</cc:CustomControl>
I can do the following (where my custom control has given the panel hosting the template the name "myPanel"):
Dim txt As TextBox = myCustomControl.myPanel.FindControl("myTextBox")
txt.Text = "Some text to put in TextBox"
What I want to do is:
myCustomControl.myPanel.myTextBox.Text = "Some text to put in TextBox"
I am writing a custom control and implementing ITemplate in it. The code that I am using can be reviewed at the following link: http://msdn.microsoft.com/en-us/library/ms178657.aspx
Under the Template field, I would only like to allow controls of specific type only, say LinkButton and TextBox. If any control(s) present inside Template is anything except LinkButton or TextBox, an error should be thrown. I am wondering how can I check it programmatically inside custom control. The problem is that there is no collection available that lists all the controls that of Template (or may be I am not aware of it.)
Header controls like create ,delete are created by using templated user controls (ITemplate) .
The controls are working in all pages except the last page when paging is enabled in grid view.
I'm working on a Navigation Menu. I've created below ServerControl and it works, but I want to allow users adding some standard ASP.NET controls within my ServerControl Tags like label, image and so on.
<MdsMenu:ServerControlMenu ID="ServerControlMenu1" runat="server">
<MdsMenu:animation AnimationSpeed="Normal" AnimationType="Opacity_Height" Delay="1000" DropShadow="true" />
<!-- HERE HAS TO HAVE SOME STANDARD ASP.NET CONTROLS -->
<!-- e.g <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> -->
</MdsMenu:MenuItem>
</MdsMenu:ServerControlMenu>
My problem is here that how I can get Child Controls within <MdsMenu:MenuItem> and show them like as they are in the output.
P.S:
I overwrite RenderContents method
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(OutPutStringBuilder.ToString());
}
I am just playing with custom controls, and have one built that looks like so:
[Code]....
I'm pretty sure its the Rendering / CreateChildren process that I'm not doing right. Problem is I cant find a good example that shows how to rerender your usercontrol when something needs updating.
I have created rounded template user control. The need is what ever we add in the user control should appear appear.
[Code]....