Multiselect
Cascade
Parent and Child multiselect,
NoSelectClose() set on the child,
selected values can be reordered by dragging them
Multiselect/Index.cshtml
@(Html.Awe().Multiselect(new MultiselectOpt
{
Name = "CategoriesMulti",
Value = new[] { Db.Categories[0].Id },
Url = Url.Action("GetCategories", "Data"),
ClearBtn = true
}))
@(Html.Awe().Multiselect(new MultiselectOpt
{
Name = "AllMealsMulti",
Url = Url.Action("GetMeals", "Data"),
NoSelectClose = true
}
.Parent("CategoriesMulti", "categories")))
Multiselect with custom item
Defining custom rendering functions for the dropdown list item and selected caption
Multiselect/Index.cshtml
@(Html.Awe().Multiselect(new MultiselectOpt
{
Value = new[] { Db.Meals[0].Id, Db.Meals[2].Id, Db.Meals[14].Id },
Url = Url.Action("GetMealsImg", "Data"),
CssClass = "bigMulti",
NoSelectClose = true
}
.ImgItem()))
Awesome/DataController.cs
public IActionResult GetMealsImg()
{
var url = Url.Content(DemoUtils.MealsUrl);
var items = Db.Meals.OrderBy(m => m.Id).ToArray()
.Select(o => new MealDisplay(o.Id, o.Name, url + o.ImageName, o.Category.Id));
return Json(items);
}
Multiselect with submenu
Multiselect/Index.cshtml
@(Html.Awe().Multiselect(new MultiselectOpt
{
Url = Url.Action("GetMealsTreeImg", "Data"),
Submenu = true
}.ImgItem()))
Awesome/DataController.cs
public IActionResult GetMealsTreeImg()
{
var url = Url.Content(DemoUtils.MealsUrl);
var res = new List<MealOitem>();
var meals = Db.Meals.ToArray();
var groups = meals.GroupBy(o => o.Category);
foreach (var g in groups)
{
res.Add(new MealOitem
{
Content = g.Key.Name,
Class = "o-itm",
NonVal = true,
Items = g.Select(meal => new MealOitem { Key = meal.Id, Content = meal.Name, url = url + meal.ImageName })
});
}
return Json(res);
}
Multiselect Combo
can add values not present in the select list
Multiselect/Index.cshtml
@(Html.Awe().Multiselect(new MultiselectOpt
{
Name = "AllMealsMultiCombo",
Url = Url.Action("GetMealsImg", "Data"),
NoSelectClose = true,
Combo = true
}))
Multiselect, with custom css
Events and Api
Showing commonly used client side api methods.
To change the value you simply call jquery
The same api methods can be used for the AjaxDropdown, AjaxRadioList controls and their mods.
To change the value you simply call jquery
.val(newvalue).trigger('change').aweload event is handled to flash the #log div whenever the dropdown loads.The same api methods can be used for the AjaxDropdown, AjaxRadioList controls and their mods.
AjaxDropdownDemo/Index.cshtml
@{
var meal1 = Db.Meals[1];
var meal2 = Db.Meals[2];
}
@(Html.Awe().AjaxDropdown("ddApi")
.Url(Url.Action("ApiGetMeals", "Data")))
<br />
<br />
@Html.Awe().Button().Text("Change value to " + meal1.Name).OnClick("app1.changeval(" + meal1.Id + ")")
@Html.Awe().Button().Text("Change value to " + meal2.Name).OnClick("app1.changeval(" + meal2.Id + ")")
@Html.Awe().Button().Text("Load only first category").OnClick("app1.loadFirstCat()")
@Html.Awe().Button().Text("Reload").OnClick("app1.reload()")
@Html.Awe().Button().Text("Toggle Enable").OnClick("app1.toggleEnable()")
<br />
<br />
<div id="log">
</div>
@section scripts
{
<script>
var app1;
$(function () {
var dd = $('#ddApi');
var o = dd.data('o');
var api = o.api;
app1 = {
changeval: function (newVal) {
dd.val(newVal).trigger('change');
},
reload: function () {
api.load();
},
loadFirstCat: function () {
api.load({ oparams: { cat1: true } });
// oparams sets cat1 just for this call
// params sets persistent parameters
},
toggleEnable: function () {
api.enable(!o.enb);
}
};
dd.on('aweload', function (e, data) {
awe.flash($('#log').html('loaded ' + data.length + ' items'));
});
});
</script>
}
Awesome/DataController.cs
public IActionResult ApiGetMeals(int? v, bool? cat1)
{
var items = (cat1 == true) ?
Db.Meals.Where(o => o.Category == Db.Categories.First()).ToArray() :
Db.Meals.ToArray();
return Json(items.Select(o => new KeyContent(o.Id, o.Name)));
}
Comments