1

我的应用程序中有一个 ViewModel,如下所示:

public class ItemViewModel {
    public string Name { get; set; }

    public string SelectedType { get; set; }
    public IEnumerable<Type> Types { get; set; }

    public string SelectedSubtype { get; set; }
    public IEnumerable<Subtype> Subtypes { get; set; }
}

我创建了一个视图来公开这些属性:

@Html.TextBoxFor(m => m.Name)

@Html.DropDownListFor(m => m.SelectedType,
    new SelectList(Model.Types, "ID", "Description"),
    "Select a type")

@Html.DropDownListFor(m => m.SelectedSubtype,
    new SelectList(Model.Subtypes, "ID", "Description"),
    "Select a subtype")

好吧,当我想刷新我的子类型下拉列表时,我必须编写大量 DOM 代码来生成新选项。

$('#SelectedType').change(function() {
    $.get('/json/GetSubtypesFromType', { 'type': $(this).val() }, function(result) {

        var options = '';
        for (var count = 0; count < result.length; count++) {
            options += "<option value='" + result[count].ID + "'>" + result[count].Description + "</option>";
        }

        $('#SelectedSubtype').html(options);
    });
});

有没有办法将新选项绑定到可枚举的子类型,ViewModel而不是编写此代码以生成选项。我需要在发布表单时检索新的可枚举,但我想将新值绑定到ViewModel集合中。

4

1 回答 1

0

观察:您正在使用 AJAX 获取值,并希望将新值添加到您的 DropDownList 助手中。

建议1: 创建一个自定义的Ajax Drop Down List Helper。

在http://www.codeproject.com/Articles/421640/Creating-a-custom-AJAX-Helper上阅读这篇文章

另一个很好的参考如何使@Ajax.DropDownList 等效?

特别有价值的参考 http://www.mikeyd.com.au/2009/08/22/dynamically-populate-a-selectdrop-down-list-using-aspnet-mvc-jquery-and-json/

建议 2: 使用部分操作来创建您的下拉列表 执行为@Html.Action("{Action}", {Controller}", new { id = {param})

或者从 jquery as$('#dropdowndiv').load('/{Controller}/{Action}')开始,action partials 首先调用一个 action 方法,然后渲染一个局部视图。这非常适合您想要动态创建选择列表的情况

于 2013-01-16T20:15:07.853 回答