Quick overview of the awesome helpers:

Single and multiple items selection:
Lookup:
 
Multilookup:
  •  
DatePicker:


AjaxRadioList and AjaxCheckboxList with mods applied:






lookups simple and with custom search using dropdownPopup
 
  •  
 


Awesome Grid bound to 2 textboxes for search:
Home/Index.cshtml
<div>
<div class="efield awe-il">@Html.Awe().TextBox("txtperson").Placeholder("search for person ...").CssClass("searchtxt") </div>
<div class="efield awe-il">@Html.Awe().TextBox("txtfood").Placeholder("search for food ...").CssClass("searchtxt") </div>
</div>

@(Html.Awe().Grid("Grid1")
.Mod(o => o.PageInfo().PageSize().ColumnsSelector().AutoMiniPager())
.Columns(
new Column{Name = "Id", Width = 75, Groupable = false, Resizable = false},
new Column{Name = "Person"},
new Column{Name = "Food"},
new Column{Name = "Location"},
new Column{Name = "Date", Width = 120},
new Column{Name = "Country.Name", ClientFormat = ".CountryName", Header = "Country"},
new Column{Name = "Chef.FirstName,Chef.LastName", ClientFormat = ".ChefName", Header="Chef"})
.Url(Url.Action("GetItems", "LunchGrid"))
.Persistence(Persistence.View) // save collapsed groups and nodes when switching between grid pages
.ColumnsPersistence(Persistence.Session) // save columns (width, visibility, etc..) for browser session lifetime
.Resizable(true)
.Height(300)
.PageSize(10)
.Parent("txtperson","person")
.Parent("txtfood","food"))
Awesome/Grid/LunchGridController.cs
public class LunchGridController : Controller
{
public ActionResult GetItems(GridParams g, string person, string food)
{
food = (food ?? "").ToLower();
person = (person ?? "").ToLower();

var list = Db.Lunches
.Where(o => o.Food.ToLower().Contains(food) && o.Person.ToLower().Contains(person))
.AsQueryable();

return Json(new GridModelBuilder<Lunch>(list, g)
{
Key = "Id", // needed for Entity Framework | nesting | tree | api
Map = o => new
{
o.Id,
o.Person,
o.Food,
o.Location,
o.Price,
o.Date,
CountryName = o.Country.Name,
ChefName = o.Chef.FirstName + " " + o.Chef.LastName
}
}.Build());
}
}


Grid and PopupForm used for CRUD operations, more details here: Grid Crud Demo

Home/Index.cshtml
@Html.InitCrudPopupsForGrid("DinnersGrid","DinnersGridCrud") 

<div class="bar">
<div style="float: right;">
@Html.Awe().TextBox("txtSearch").Placeholder("search...").CssClass("searchtxt")
</div>
<button type="button" onclick="awe.open('createDinnersGrid')" class="awe-btn mbtn">Create</button>
</div>

@(Html.Awe().Grid("DinnersGrid")
.Url(Url.Action("GridGetItems", "DinnersGridCrud"))
.Parent("txtSearch","search")
.Height(350)
.Columns(
new Column{Name = "Id", Width = 55},
new Column{Name = "Name"},
new Column{Name = "Date"},
new Column{Name = "Chef.FirstName,Chef.LastName", ClientFormat = ".ChefName", Header = "Chef"},
new Column{ClientFormat = ".Meals", Header = "Meals"},
new Column{ClientFormat = GridUtils.EditFormatForGrid("DinnersGrid"), Width = 50},
new Column{ClientFormat = GridUtils.DeleteFormatForGrid("DinnersGrid"), Width = 50 }))
Demos/Grid/DinnersGridCrudController.cs
public class DinnersGridCrudController : Controller
{
private static object MapToGridModel(Dinner o)
{
return
new
{
o.Id,
o.Name,
o.Date,
ChefName = o.Chef.FirstName + " " + o.Chef.LastName,
Meals = string.Join(", ", o.Meals.Select(m => m.Name))
};
}

public ActionResult GridGetItems(GridParams g, string search)
{
search = (search ?? "").ToLower();
var items = Db.Dinners.Where(o => o.Name.ToLower().Contains(search)).AsQueryable();

return Json(new GridModelBuilder<Dinner>(items, g)
{
Key = "Id", // needed for api select, update, tree, nesting, EF
GetItem = () => Db.Get<Dinner>(Convert.ToInt32(g.Key)), // called by the grid.api.update ( edit popupform success js func )
Map = MapToGridModel
}.Build());
}

public ActionResult Create()
{
return PartialView();
}

[HttpPost]
public ActionResult Create(DinnerInput input)
{
if (!ModelState.IsValid) return PartialView(input);

var dinner = Db.Insert(new Dinner
{
Name = input.Name,
Date = input.Date.Value,
Chef = Db.Get<Chef>(input.Chef),
Meals = Db.Meals.Where(o => input.Meals.Contains(o.Id)),
BonusMealId = input.BonusMealId
});

return Json(MapToGridModel(dinner)); // returning grid model, used in grid.api.renderRow
}

public ActionResult Edit(int id)
{
var dinner = Db.Get<Dinner>(id);

var input = new DinnerInput
{
Id = dinner.Id,
Name = dinner.Name,
Chef = dinner.Chef.Id,
Date = dinner.Date,
Meals = dinner.Meals.Select(o => o.Id),
BonusMealId = dinner.BonusMealId
};

return PartialView("Create", input);
}

[HttpPost]
public ActionResult Edit(DinnerInput input)
{
if (!ModelState.IsValid) return PartialView("Create", input);
var dinner = Db.Get<Dinner>(input.Id);

dinner.Name = input.Name;
dinner.Date = input.Date.Value;
dinner.Chef = Db.Get<Chef>(input.Chef);
dinner.Meals = Db.Meals.Where(m => input.Meals.Contains(m.Id));
dinner.BonusMealId = input.BonusMealId;
Db.Update(dinner);

// returning the key to call grid.api.update
return Json(new { dinner.Id });
}

public ActionResult Delete(int id, string gridId)
{
var dinner = Db.Get<Dinner>(id);

return PartialView(new DeleteConfirmInput
{
Id = id,
GridId = gridId,
Message = string.Format("Are you sure you want to delete dinner <b>{0}</b> ?", dinner.Name)
});
}

[HttpPost]
public ActionResult Delete(DeleteConfirmInput input)
{
Db.Delete<Dinner>(input.Id);
return Json(new { input.Id });
}
}