ASP.. NET MVC -刷新下拉列表到ViewModel而无需编写DOM代码

本文关键字:代码 DOM ViewModel MVC NET 刷新 下拉列表 ASP | 更新日期: 2023-09-27 17:53:53

我有一个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集合。

ASP.. NET MVC -刷新下拉列表到ViewModel而无需编写DOM代码

Observation:您正在使用AJAX 'get' ting值,并希望将新值添加到您的DropDownList Helper中。

suggestion: 创建一个自定义Ajax下拉列表助手。

在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: 使用action partial创建下拉列表执行为@Html.Action("{Action}", {Controller}", new { id = {param})

或从jquery作为$('#dropdowndiv').load('/{Controller}/{Action}'),动作局部首先调用一个动作方法,然后呈现一个局部视图。这对于想动态创建选择列表的情况非常理想