客户端将从dropDown列表中选择一个项目,然后将使用此新选择的值查找链接到该选定项目的资产,然后将这些资产加载到listBox中。
这听起来很简单,我知道我可以使用局部视图,但仅仅更新表单上的一个组件似乎有些过分。
任何
答案 0 :(得分:2)
我自己在MVC 1.0中做过这个。我在第一个下拉列表中使用了onchange,它使用所选值调用了一个动作。该操作返回了JSON结果。调用该操作的jQuery脚本然后使用JSON填充第二个下拉列表。
这是足够的解释,还是你想帮助编写javascript,动作或两者兼而有之?
在你的观点中:
<%= this.Select("DDLName").Attr("onchange", "NameOfJavascriptFunction();") %>
<%= this.MultiSelect("ListBoxName") %>
javascript将如下所示:
function NameOfJavascriptFunction() {
var ddlValue = $("DDLName").val();
jQuery.ajax({
type: 'GET',
datatype: 'json',
url: '/Controller/Action/' + dValue,
success: updateMultiSelect
});
}
function updateMultiSelect(data, status) {
$("#ListBoxName").html("");
for(var d in data) {
$("<option value=\"" + data[d].Value + "\">" + data[d].Name + "</option>">).appendTo("#ListBoxName");
}
}
最后,动作是这样的(把它放在第一个javascript的控制器和动作中):
public ActionResult Action(int id) //use string if the value of your ddl is not an integer
{
var data = new List<object>();
var result = new JsonResult();
this.SomeLogic.ReturnAnEnumerable(id).ToList().ForEach(foo => data.Add(new { Value = foo.ValueProperty, Name = foo.NameProperty }));
result.Data = data;
return result;
}
如果您需要更多解释,请随时提出跟进问题。