ASP.NET Visual Designer

Table of contents

Introduction

The ASP.NET Visual Designer, codenamed AspNetEdit, is a visual design surface for ASP.NET, aiming to provide Mono users with a RAD web design tool on Linux. It allows users to manipulate ASP.NET Web Controls in an HTML designer.

Features

AspNetEdit does not aim to be a complete IDE. After being developed as a proof-of-concept standalone editor, it now has been integrated into MonoDevelop, where it is intended to be part of a complete ASP.NET editing solution.
The ASP.NET Visual Designer embedded in MonoDevelop
  • Web Controls can be placed on the design surface from the toolbox, and can be selected, resized and moved around
  • The properties of the selected Web Control can be inspected and modified with the property grid
  • Many of the Mozilla editor's features are exposed: text can be entered directly into the design surface, and made bold, italic, indented and so forth. Tables can also be edited directly on the design surface.
  • ASPX pages can be loaded and saved

Installation

Prospective users are recommended not to install AspNetEdit at this early point in development, but to wait for a release to be made.

Nevertheless, AspNetEdit can be downloaded as part of the MonoDevelop codebase; it is in the extras/AspNetEdit subdirectory. It can be built against the system MonoDevelop installation by using the configure script (./configure; make; make install). Alternatively it can be hooked into the MonoDevelop build by running the top-level MonoDevelop configure script using a profile that contains AspNetEdit.

The standalone editor code is still available from the Mono SVN repository, module aspeditor, or can be viewed online. Please follow the instructions in the INSTALL file to build and run the program.

Plans

In the short term, there are a few features that need to be completed before the editor is ready for use:

  • Expose HTML controls in the toolbox.
  • Provide a more acceptable runtime environment so that more controls can run.
  • Handle more ASP.NET syntax.
  • Merge the parser with that in MonoDevelop's ASP.NET project support.
  • Expose more Mozilla Editor features: full table, font and image editing.


In the long term, there is a lot that can be done. A few of the possibilities:

  • Write a Gecko DOM wrapper to provide deeper integration with Mozilla
  • Add support for web controls with HTML and other arbitrary controls inside them
  • Implement more of the .NET designer framework, and use control designers rather than rendering the controls directly
  • Add data binding support
  • XHTML support in Mozilla editor
  • Stop Mozilla editor from rearranging source indentation
  • Semantically-oriented CSS editor (some thoughts)
  • Document outline
  • User controls: editing and consuming
  • (ASP.NET 2) Master Pages: editing and consuming
  • (ASP.NET 2) Designer regions

If you are interested in contributing, please contact Michael.

Architecture

AspNetEdit is based on the Mozilla Editor, which it hosts in a Gecko# GTK# widget. A custom Mozilla extension allows it to visualise blocks of HTML emitted by ASP.NET Web Controls as discrete entities, and together with a C++ interop library allows it to be controlled from the C# host.

The C# host initatiates and tracks Web Control objects, and provides them with various designer services, using the .NET component model. It is also responsible for parsing and persisting .aspx pages.

More in-depth discussions of AspNetEdit, and updates on the project's status, can be found on Michael Hutchinson's blog

License

AspNetEdit is licensed under the MIT X11 license.

Credits

Sponsors

Many thanks to Google, who originally funded the project as part of their Summer of Code programme in 2005, and funded the MonoDevelop integration in 2006.

Primary developers

Michael Hutchinson wrote the C# host, the designer infrastructure and the Gecko interop code, and integrated it into MonoDevelop.

Blagovest Dachev wrote the Mozilla extension, and provided valuable Mozilla editor expertise.

Other contributors

Eric Butler provided the initial GTK# property grid implementation