首页 > 解决方案 > ASP.Net MVC:将下拉列表绑定到模型上的列表

问题描述

我有一个包含课程列表的模型。我想在局部视图中为列表中的每门课程呈现一个部分,动态创建部分。使用循环可以正常工作。

@for (int i = 0; i < Model.CourseList.Count; i++)
        {
            <div id="exhuastfan_1" class="panel panel-default panel-body row" border="1">
                <div class="col-md-4 col-sm-12">
                    <label class="marginRightMid">Course Name :</label> 
                    @Html.TextBoxFor(m => m.CourseList[i].Name, new { @class = "form-control" })
                </div>
                <div class="col-md-4 col-sm-12">
                    <label class="marginRightMid">Duration Textbox :</label>
                    @Html.TextBoxFor(m => m.CourseList[i].Duration, new { @class = "form-control" })

                    <label class="marginRightMid">Duration Dropdown:</label><span class="spnRequiredStar">*</span>
                    @Html.DropDownListFor(m => m.CourseList[i].Duration, new SelectList(@Model.DurationTypes, "Value", "Text"), new { @id = "DurationTypes", @class = "form-control" })
                </div>
                <div class="col-md-4 col-sm-12">
                    <label class="marginRightMid">Cost :</label>
                    @Html.TextBoxFor(m => m.CourseList[i].Cost, new { @class = "form-control" })
                </div>
                <div>
                    <hr/>
                </div>
            </div>
        }

问题发生在我需要使用 Html.DropdownListFor() 绑定下拉列表的地方。在这里,它无法从下拉列表中选择正确的值。

我尝试将 Dropdown 绑定到 ViewModel 上的测试属性,它工作正常。

@Html.DropDownListFor(m => m.TestDuration, new SelectList(@Model.DurationTypes, "Value", "Text"), new { @id = "DurationTypeTest", @class = "form-control" })

我没有得到循环绑定的特殊之处。

连接示例模型和控制器。模型:

namespace DynamicModalBindingMVC.Models

{ public class Course { public string Name { get; 放; } 公共字符串持续时间 { 获取;放; } 公共字符串成本 { 获取;放; }

}

public class CourseListVM
{
    public List<Course> CourseList { get; set; }
    public List<SelectListItem> DurationTypes { get; set; }
    public string TestDuration { get; set; }
}

}

控制器:

public class DynamicBindedUIController : Controller
{
    // GET: DynamicBindedUI
    public ActionResult Index()
    {
        CourseListVM vm = new CourseListVM();
        List<Course> courseList = new List<Course>() {
        new Course() { Name = "C++", Duration = "6 months", Cost = "500"},
        new Course() { Name = "C#", Duration = "4 months", Cost = "200"},
        new Course() { Name = "Java", Duration = "8 months", Cost = "600"},
        };

        List<SelectListItem> durList = new List<SelectListItem>();
        SelectListItem item0 = new SelectListItem() { Text = "", Value = "" };
        SelectListItem item = new SelectListItem() { Text = "6 months", Value = "6 months" };
        SelectListItem item1 = new SelectListItem() { Text = "4 months", Value = "4 months" };
        SelectListItem item2 = new SelectListItem() { Text = "8 months", Value = "8 months" };
        durList.Add(item0);
        durList.Add(item);
        durList.Add(item1);
        durList.Add(item2);

        vm.DurationTypes = durList;
        vm.CourseList = courseList;
        vm.TestDuration = courseList[1].Duration; //"8 months";

        return View("DynamicBindedUI", vm);

    }
}

看法:

<body>
<div class="col-md-12">
    <div><h3>Course List</h3></div>
    Works Fine : View Model Property Binding : TestDuration:  @Html.DropDownListFor(m => m.TestDuration, new SelectList(@Model.DurationTypes, "Value", "Text"), new { @id = "DurationTypeTest", @class = "form-control" })
</div>
<div class="row">
    <div class="col-md-12">
        <div>
            <hr />
        </div>
        @for (int i = 0; i < Model.CourseList.Count; i++)
        {
            <div id="exhuastfan_1" class="panel panel-default panel-body row" border="1">
                <div class="col-md-4 col-sm-12">
                    <label class="marginRightMid">Course Name :</label> 
                    @Html.TextBoxFor(m => m.CourseList[i].Name, new { @class = "form-control" })
                </div>
                <div class="col-md-4 col-sm-12">
                    <label class="marginRightMid">Duration Textbox :</label>
                    @Html.TextBoxFor(m => m.CourseList[i].Duration, new { @class = "form-control" })

                    <label class="marginRightMid">Duration Dropdown:</label><span class="spnRequiredStar">*</span>
                    @Html.DropDownListFor(m => m.CourseList[i].Duration, new SelectList(@Model.DurationTypes, "Value", "Text"), new { @id = "DurationTypes", @class = "form-control" })
                </div>
                <div class="col-md-4 col-sm-12">
                    <label class="marginRightMid">Cost :</label>
                    @Html.TextBoxFor(m => m.CourseList[i].Cost, new { @class = "form-control" })
                </div>
                <div>
                    <hr/>
                </div>
            </div>
        }

    </div>

提前致谢!

标签: asp.netasp.net-mvcmodel-bindinghtml.dropdownlistfor

解决方案


推荐阅读