Skip to content
This repository has been archived by the owner on Nov 9, 2018. It is now read-only.
/ AcspNet Public archive

Lightweight and fast .NET web-framework based on MVC and OWIN


Notifications You must be signed in to change notification settings


Folders and files

Last commit message
Last commit date

Latest commit


Repository files navigation

This project is renamed to "Simplify.Web" and moved to

AcspNet v5.3 will be Simplify.Web v1.0


ACSP.NET (Advanced Controls Site Platform .NET) is a lightweight and fast server-side .NET web-framework based on MVC and OWIN

Package status

Latest version Nuget version
Dependencies NuGet Status

Issues status

Ready issues
Stories in Ready

Build status

Platform Status of last build
.NET (4.5) AppVeyor build status
Mono (3.8.0) Travis build status

Main features

  • Based on MVC and MVVM patterns
  • Comes as OWIN middleware
  • Uses switchable IOC container for itself and controllers, views constructor injection (Simplify.DI)
  • Mono-friendly
  • Support async controllers
  • Uses fast templates engine (Simplify.Templates)
  • Supports controllers which can be run on any page
  • Localization-friendly (supports templates, string table and data files localization by default)
  • Mocking-friendly

Getting started

To get started you can install visual studio AcspNet project templates and read this article.

Some examples

Simple static page controller

// Controller will be executed only on HTTP GET request like
public class AboutController : Controller
    public override ControllerResponse Invoke()
        // About.tpl content will be inserted into {MainContent} in Master.tpl
        return new StaticTpl("Static/About", StringTable.PageTitleAbout);

Any page controller with high run priority example

Runs on any request and adds login panel to a pages

// Controller will be executed on any request and will be launched before other controllers (because they have Priority = 0 by default)
public class LoginPanelController : AsyncController
    public override async Task<ControllerResponse> Invoke()
        return Context.Context.Authentication.User == null
            // Data from GuestPanel.tpl will be inserted into {LoginPanel} in Master.tpl
            ? new InlineTpl("LoginPanel", await TemplateFactory.LoadAsync("Shared/LoginPanel/GuestPanel"))
            // Data from LoggedUserPanelView will be inserted into {LoginPanel} in Master.tpl
            : new InlineTpl("LoginPanel", await GetView<LoggedUserPanelView>().Get(Context.Context.Authentication.User.Identity.Name));

View example

public class LoggedUserPanelView : View
    public async Task<ITemplate> Get(string userName)
        // Loading template from LoggedUserPanel.tpl asynchronously
        var tpl = await TemplateFactory.LoadAsync("Shared/LoginPanel/LoggedUserPanel");

        // Setting userName into {UserName} variable in LoggedUserPanel.tpl
        tpl.Add("UserName", userName);

        return tpl;

Templates example

<!DOCTYPE html>

##### About.tpl

<div class="container">
    Welcome to about page!

### [Detailed documentation](