asp.net - 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>
提前致谢!