Small width layout Medium width layout Maximum width layout Small text Medium text Large text
     Search
Downloads Downloads Directory Directory Forums Forums Forge Forge Blogs Blogs        Marketplace Marketplace Careers Program Careers
Products › Development › Forge › Core - WebControls Register  |  

 

dnn_ct_webcontrols_170x64.gif

 

  Quick Links  
 


  Team Leadership  

Jon Henning

jonhenning.jpg

 


  DotNetNuke Projects  
The DotNetNuke Projects are a special category of platform extensions which are developed by volunteers to conform to the high professional standards mandated by DotNetNuke Corporation. The DotNetNuke Projects are distributed as a standard part of the DotNetNuke core application release offerings.

 


  Ads  
Biz Modules provides professional business modules and solutions for DotNetNuke
 


  Sponsors  

Meet Our Sponsors

Click here to go to dev.live.com for Windows Live developer resources
SteadyRain
DataSprings - Great Ideas. Always Flowing.
R2integrated - formerly bi4ce
Jango Studios - Skins, Modules and Hosting for DotNetNuke
The Official Microsoft ASP.NET Website
 


DotNetNuke® Project :: WebControls

The primary purpose of the DotNetNuke WebControls project is to allow developers to utilize feature-rich controls in their applications without the associated cost or distribution restrictions associated with commercial controls. All controls utilize the ClientAPI, and therefore support a rich client side object model, work cross-browser, and utilize AJAX functionality.

The DotNetNuke TreeView control is an open-source ASP.NET WebControl that has a rich client-side object model and supports advanced featuresets like populate on demand and keyboard navigation.
The DotNetNuke Menu control is an open-source ASP.NET WebControl that has a rich client-side object model and supports advanced featuresets like populate on demand and keyboard navigation (soon).
The DotNetNuke Label Edit control is an open-source ASP.NET WebControl that allows any label to be editable on the client where it uses a client-callback to persist the changes. Simply specify a client-side event like onclick to allow the user to edit. It supports RichText and MultiLine editing.
The DotNetNuke Text Suggest control is an open-source ASP.NET WebControl that allows any textbox to suggest the results the user is looking for by dynamically populating a menu of matched items.
The DotNetNuke Tab Strip control is an open-source ASP.NET WebControl that allows a page to be displayed in a tabular manner. It supports 3 rendering modes, including AJAX on-demand loading to allow for optimal performance.
The DotNetNuke ToolBar control is an open-source ASP.NET WebControl that allows a toolbar to be attached to any control.
 


WebControls Project Blog
Apr 21

Posted by: Jon Henning
Monday, April 21, 2008

Having attending this year's MVP Summit, I have to say I am even more interested in writing some Silverlight applications.  One of the questions I am trying to answer is just how to get Silverlight to talk to the server, especially when it comes to DotNetNuke integration.  Some quick searching yielded this excellent blog on how Silverlight and javascript can interact.  I thought it may be helpful to some people to see how to allow Silverlight to call into a PageMethod and pass and return a rich object.  I admit this may not be the best option, as I still need to do some research, but at a bare minimum this approach should allow a Silverlight developer to easily invoke a DotNetNuke Control Method

Here are the simple steps to get things working using Silverlight Beta 1 code.

1)  Create your Page Method (C# default.aspx.cs)

[WebMethod]
public static Dictionary<string, string> TestDict(Dictionary<string, string> dict)
{
  if (dict.Count > 0)
    dict.Add("Server", "cool!");
  return dict;
}

2)  Create a simple button on your page .xaml and hook it up to a Click handler. (Page.xaml)

<Button Width="100" Content="Dictionary" Click="Dictionary_Click" />

3)  Since PageMethods are asynchronous calls, when they are invoked, we need to give a callback function pointer (delegate) for it to notify us when it is complete or failed.  So we need to define a new delegate with the following signature (C# - Page.xaml.cs)

delegate void PageMethodDelegate(object result, object context);

4)  Our click handler is where most of the "magic" is done. (C# - Page.xaml.cs)

private void Dictionary_Click(object sender, RoutedEventArgs e)
{
  //Create a dictionary we wish to pass
  Dictionary<string, string> dict = new Dictionary<string, string>();
  dict.Add("test", "1");

  //get reference to PageMethods client-side object
  var pageMethods = (ScriptObject)HtmlPage.Window.GetProperty("PageMethods");

  //call PageMethod, giving delegate callbacks
  pageMethods.Invoke("TestDict", dict.ToJSDictionary<string>(), new PMDelegate(Success), new PMDelegate(Fail), "Context");
}

Remember that calling a page method is done in javascript by simply calling the following method signature (javascript)

PageMethods.FunctionName(arguments paramArray, successDelegate, failDelegate, context)

To clarify further, lets say we have our method on the server called Add(int x, int y).  To invoke this from the client we would use the following code (javascript)

PageMethods.Add(1, 2, successFunc, failFunc, someContext);

Note:  You do not need to write any javascript for this sample to work.  I just included the previous lines of code to give you a better understanding of what the javascript we wish to invoke looks like.

Another thing to note here is that we are creating a managed Generic Collection and adding some test data.  Since our javascript will not understand the dictionary, we need to translate it into something it will understand.  In my sample an extension method has been created and imported (ToJSDictionary).  This method has the following logic.

public static class MyExtensions
{
  public static object ToJSDictionary<T>(this Dictionary<string, T> dict)
 
{
    var jsdict = HtmlPage.Window.CreateInstance("Object");
    foreach (string key in dict.Keys)
      jsdict.SetProperty(key, dict[key].ToString());

    return jsdict;
  }
}

Notice how we are creating a javascript object and setting each key/value pair from our generic Dictionary.

5)  The final step is to declare our callback function handlers (Success and Fail)

public void Success(object result, object context)
{
  ScriptObject so = result as ScriptObject;
  txt.Text = so.GetProperty("Server").ToString();
}

public void Fail(object result, object context)
{
  txt.Text = "FAIL";
}

Since calling out to javascript needed a conversion, it stands to reason that the translation coming in will also need to be obtained a little different.  I am not sure that it is possible to enumerate the javascript object collection, so for now, my code doesn't use another extension method to convert it to a generic dictionay, instead I go after the values directly via the GetProperty.

As I mentioned earlier, I am not certain if this is the best approach to do new development on, instead I am thinking that calling into the PageMethod directly via the Http stack that Silverlight offers will be better.  My concern here though is whether or not I can pass cookies in the same manner as calling from javascript.  Regardless, this should prove useful to those of you trying to figure out how to retrofit existing functionality into Silverlight.

This concludes the overview of how to invoke and return complex object to and from the server.  The sample provided also demonstrates the passing of simple data types (strings and integers).

Download sample application here

Tags:

Re: Silverlight + PageMethods

Hi Jon,
You can call web services directly from the managed code in SL 2 now. Would that not be a better way to do this?

By philip.beadle on   Monday, April 28, 2008

Re: Silverlight + PageMethods

Philip,
Yeah, I know it is possible to make http calls (end of blog mentions this). My concern is whether cookies get passed (i.e. authentication). I haven't tried this yet. The point of the post is to show that Silverlight can interact with complex javascript objects, and therefore, at a bare minimum it can be used to make authenticated callbacks to the server with no additional security code necessary.

By jhenning@solpart.com on   Monday, April 28, 2008
 


Mad Development: dotnetnuke design and development
We are an expert Dotnetnuke shop specializing in developing solutions that merge the requirements of design and branding, content management, ecommerce, search engine optimization and business logic.
www.MadDevelopment.com
telerik
telerik r.a.d.controls suite is the most innovative and comprehensive toolset for ASP.NET development, tailored for seamless integration with the DotNetNuke project. This integrated collection of controls allows professionals to build web-solutions with the UI richness and responsiveness of desktop applications.
dnn.telerik.com
CrystalTech
CrystalTech Web Hosting™ provides first-class service and support. Our value-packed ASP.NET plans offer DNN installation, SQL 2005 and up to 100 domain names starting at only $16.95 per month!
CrystalTech.com

DotNetNuke Corporation   Terms Of Use  Privacy Statement
DotNetNuke®, DNN®, and the DotNetNuke® logo are registered trademarks of DotNetNuke Corporation
Hosted by MaximumASP