/Simplify.Web

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

Primary LanguageC#GNU Lesser General Public License v3.0LGPL-3.0

Simplify.Web

Simplify

Simplify.Web is a lightweight and fast server-side .NET web-framework based on MVC and OWIN

This project is a continuator of AcspNet web-framework

Issues status

Ready issues
Stories in Ready

Build status

.NET (4.5.1) Mono (Latest)
master AppVeyor Build status Travis Build Status
develop AppVeyor Build status 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

Some examples

Simple static page controller

// Controller will be executed only on HTTP GET request like http://mysite.com/about
[Get("about")]
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)
[Priority(-1)]
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

Master.tpl
<!DOCTYPE html>
<html>
<head>
    <title>{Title}</title>
</head>
<body>
    {MainContent}
</body>
</html>
```

##### About.tpl

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

### [Detailed documentation](https://github.com/i4004/Simplify.Web/wiki)