我有多个下拉列表,这些下拉列表使用for循环进行渲染,我在将所选值发布到控制器时遇到问题。在我的查询中,我的选择列表是这样的:
model.CreateGroupForm.Genders = new List<SelectListItem>
{
new SelectListItem() {Text = "Either", Value = "Either"},
new SelectListItem() {Text = "Male", Value = "Male"},
new SelectListItem() {Text = "Female", Value = "Female"},
};
我的第一个问题是甚至让我的下拉列表显示数据库值,即使我确认它正在检索正确的值。它无法解决这个问题:
@for (var c = 0; c < Model.ExistingGroups.Count; c++)
{
@using (Html.BeginForm("EditGroup", "Group", new { id = Model.Id.StripCollectionName(), slug = Model.Slug, innerid = Model.ExistingGroups[c].Id }, FormMethod.Post, new { id = "editcommunityteamform" + c.ToString(CultureInfo.InvariantCulture), @class = "nomarginbottom" }))
{
...
@Html.DropDownListFor(x => x.ExistingGroups[c].Gender, Model.Createform.Genders)
<button type="submit" class="btn btn-primary" title="Update name and description of this group">Update</button>
}
}
在对Stack进行一些挖掘之后,我发现渲染的每个下拉列表都需要它自己的单独列表。所以我把它改成了:
@Html.DropDownListFor(x => x.ExistingGroups[c].Gender,
new SelectList( Model.CreateGroupForm.Genders,"Value", "Text",Model.ExistingGroups[c].Gender))
然后正确显示查询的值,但是当我提交表单时它只是向控制器发送null。我在for循环中遇到了与boble复选框相同的问题。
我在控制器中的ActionResult只需要一个字符串值,如下所示:
public ActionResult EditGroup(EditGroupInput input)
{
var command = new EditGroupCommand(input.Gender);
....
我的视图模型如下所示:
public IList<CommunityGroup> ExistingGroups { get; set; }
public CreateGroupInput CreateGroupForm { get; set; }
然后上面的两个类具有代码中提到的属性。
答案 0 :(得分:3)
我发现了这个问题,即dropdownlistfor,checkboxlistfor等不喜欢在&#39;之内进行操作。环。我当然不具备理解原因的技术诀窍,但是当我将dropdownlist更改为dropdownlist时,它确实有效。所以解决方案看起来像这样:
@for (var c = 0; c < Model.ExistingGroups.Count; c++)
{
@using (Html.BeginForm("EditGroup", "Group", new { id = Model.Id.StripCollectionName(), slug = Model.Slug, innerid = Model.ExistingGroups[c].Id }, FormMethod.Post, new { id = "editcommunityteamform" + c.ToString(CultureInfo.InvariantCulture), @class = "nomarginbottom" }))
{
...
@Html.DropDownList("Gender", new SelectList(Model.CreateGroupForm.Genders, "Value", "Text", Model.ExistingGroups[c].Gender))
...
}
}
答案 1 :(得分:0)
EditGroupInput应该是ExistingGroups的集合,因为控制器操作方法与view强绑定。或者使用formcollection作为参数,并查看从视图到控制器发布的所有键。