C# ASP.NET MVC-在不编写DOM代码的情况下将下拉列表刷新到ViewModel中

C# ASP.NET MVC-在不编写DOM代码的情况下将下拉列表刷新到ViewModel中,c#,asp.net-mvc-3,jquery,asp.net-ajax,C#,Asp.net Mvc 3,Jquery,Asp.net Ajax,我的应用程序中有一个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; } publ

我的应用程序中有一个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; }
}
嗯,当我想刷新我的子类型dropdownlist时,我必须编写大量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);
    });
});
$('#SelectedType')。更改(函数(){
$.get('/json/GetSubjectsFromType',{'type':$(this.val()}),函数(result){
var选项=“”;
对于(变量计数=0;计数

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

观察:您正在使用AJAX“获取”值,并希望将新值添加到DropDownList帮助器中

建议1:创建自定义Ajax下拉列表帮助器

请在上阅读这篇文章

又一个好裁判

特别有价值的参考

建议2:使用部分操作创建下拉列表 作为
@Html.Action(“{Action},{Controller}”,新的{id={param})


或者从jquery作为
$('#dropdowndiv').load('/{Controller}/{Action}')加载
,action partials首先调用一个action方法,然后呈现一个partial视图。这非常适合于您希望动态创建selectlist的情况

谢谢,Dave a。两个建议都很好,我会先尝试实现第二个。如果我不能,第一个解决方案也会帮助我。谢谢!!!
$('#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);
    });
});