<div class="editor-label">
@Html.LabelFor(model => model.CategoryId, "Category")
</div>
<div class="editor-field">
<table>
<tr>
<td>@Html.AjaxComboBoxFor(model => model.CategoryId,
"/Category/Lookup",
"/Category/Caption",
new { style = "width: 300px " } // html attributes for span
new { sub_info = true } ) // other json attributes for jQuery Ajax ComboBox
</td>
<td>@Html.ValidationMessageFor(model => model.CategoryId)</td>
</tr>
</table>
</div>
On controller:
[HttpPost]
public JsonResult Lookup(string q_word, string primary_key, int per_page, int page_num)
{
using (var svc = SessionFactoryBuilder.GetSessionFactory().OpenSession())
{
var FilteredCategory = svc.Query<Category>()
.Where(x => q_word == "" || x.CategoryName.Contains(q_word));
var PagedFilter = FilteredCategory.OrderBy(x => x.CategoryName)
.LimitAndOffset(per_page, page_num)
.ToList();
return Json(
new
{
cnt = FilteredCategory.Count()
,primary_key = PagedFilter.Select(x => x.CategoryId)
,candidate = PagedFilter.Select(x => x.CategoryName)
,cnt_page = PagedFilter.Count()
// these are the sub info:
,attached = PagedFilter.Select(x =>
new[]
{
new string[] { "Code", x.CategoryCode } ,
new string[] { "Ranking", x.Ranking.ToString() }
}
)
}
);
}//using
}//Lookup
[HttpPost]
public string Caption(string q_word)
{
using (var svc = SessionFactoryBuilder.GetSessionFactory().OpenSession())
{
if (string.IsNullOrEmpty(q_word))
return "";
else
return
svc.Query<Category>()
.Where(x => x.CategoryId == int.Parse(q_word))
.Select(x => x.CategoryName)
.SingleOrDefault();
}
}
Working code available on: http://code.google.com/p/jquery-ajax-combobox-aspnet-mvc-helper/downloads/list
No comments:
Post a Comment