如果您正在寻找一种方法来简化此类 ajax 调用以在特定事件后更新接口,使用 asp.net mvc 4,我建议您查看很棒的 awesome 帮助程序集。
请放心,这是一组非常容易学习的助手。
我鼓励去Live demo 玩一会儿。您将很快意识到它的巨大潜力。
然后是主从下拉列表的示例(默认演示页面上的第一个元素)。
这是进入视图的代码:
Cascading using binding to Parent:<br />
<%:Html.Awe().AjaxDropdown("Category")
.Url(Url.Action("GetCategories","Home")) %>
<%:Html.Awe().AjaxDropdown("ChildMeal")
.Url(Url.Action("GetMeals","Home"))
.Parent("Category") %>
第一个下拉列表是 ÀjaxDropDownnamedCategory. It is filled by executing an action method calledGetCategoriesfound on a controller calledHomeController`(在本例中,这些是膳食类别)。
请注意,Awesome 在某些情况下会使用一些约定。例如,如果我们将第一个 AjaxDropDown 声明限制为 <%:Html.Awe().AjaxDropdown("Category")%>,那么 Awesome 将假定我们将从名为 GetItems 的操作方法填充下拉列表,并且它会期望在名为 CategoryAjaxDropDownController 的控制器上找到它.但是由于我们已经指定了对应动作的 url,它会在一个名为 SPECIFIED_NAME+Controller 的控制器上寻找指定的动作方法(在这个例子中是 HomeController) p>
第二个名字是 ChildMeal,它的父级是 Category ajax 下拉列表,当在 Category 下拉列表中更改所选元素时填充它,当发生这种情况时,它通过执行 HomeController 控制器中的 GetMeals 操作方法来填充.
这里是HomeController中动作方法的代码
public ActionResult GetCategories(int? v)
{
var items = Db.Categories
.Select(o => new SelectableItem(o.Id, o.Name, v == o.Id));// value, text, selected
return Json(items);
}
public ActionResult GetMeals(int? v, int? parent)
{
var items = Db.Meals.Where(o => o.Category.Id == parent)
.Select(o => new SelectableItem(o.Id, o.Name, v == o.Id));// key, text, selected
return Json(items);
}
从返回对象中可以看出,JSON 处理复杂性由 Awesome 管理,这一切对开发人员来说都是透明的(您只需调用 Json(items) 即可完成。
Db 对象提供数据。您可以使用继承自 System.Data.Entity.DbContext 的类来从数据库加载数据。
在许多非常有趣的丰富组件中,您还有许多其他类似的组件(例如 AjaxRadioList、AjaxCheckBoxList、AjaxList、AutoComplete 组件……)。
我建议你去现场演示,玩一下,看看各种示例和源代码,然后尝试创建你的第一个很棒的项目。