下拉列表在“for”循环中不发布值
本文关键字:布值 循环 for 下拉列表 | 更新日期: 2023-09-27 18:31:44
我有多个下拉列表,这些下拉列表使用 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 循环中的布尔复选框上遇到了同样的问题。
控制器中的 ActionResult 只需要一个字符串值,如下所示:
public ActionResult EditGroup(EditGroupInput input)
{
var command = new EditGroupCommand(input.Gender);
....
我的视图模型如下所示:
public IList<CommunityGroup> ExistingGroups { get; set; }
public CreateGroupInput CreateGroupForm { get; set; }
然后上面的 2 个类具有代码中提到的属性。
我发现了这个问题,即下拉列表、复选框列表等不喜欢在"for"循环中操作。 我当然没有技术知识来理解为什么,但是当我将下拉列表更改为下拉列表时,它起作用了。 所以解决方案看起来像这样:
@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))
...
}
}
EditGroupInput 应该是现有组的集合,因为控制器操作方法与 view 紧密绑定。或者使用 formcollection 作为参数,并查看从视图发布到控制器的所有键是什么。