动态更新MVC 1.0中的html.listBox?

时间:2010-10-26 14:11:15

标签: javascript asp.net-mvc

客户端将从dropDown列表中选择一个项目,然后将使用此新选择的值查找链接到该选定项目的资产,然后将这些资产加载到listBox中。

这听起来很简单,我知道我可以使用局部视图,但仅仅更新表单上的一个组件似乎有些过分。

任何

1 个答案:

答案 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;
}

如果您需要更多解释,请随时提出跟进问题。