gpt4 book ai didi

c# - 我如何使用 MVC.Net 模型绑定(bind) 'List' 的列表

转载 作者:行者123 更新时间:2023-11-30 16:59:15 25 4
gpt4 key购买 nike

我正在尝试创建一个由一系列下拉列表组成的表单,所有这些列表都是从数据库加载的。我不知道需要多少下拉列表,或者每个下拉列表在编译时会有多少选项。

如何设置这些字段以允许它们在发布时进行模型绑定(bind)?

在下面的每个代码元素中都有很多其他的复杂性,但即使减少到基本级别,我也无法让模型绑定(bind)工作。


模型:

public class MyPageViewModel
{
public List<MyDropDownListModel> ListOfDropDownLists { get; set; }
}

public class MyDropDownListModel
{
public string Key { get; set; }
public string Value { get; set; }
public List<SelectListItem> Options { get; set; }
}

Controller 获取操作:

[AcceptVerbs(HttpVerbs.Get)]
[ActionName("MyAction")]
public ActionResult MyGetAction()
{
var values_1 = new List<string> {"Val1", "Val2", "Val3"};
var options_1 =
values_1
.ConvertAll(x => new SelectListItem{Text=x,Value=x});

var myDropDownListModel_1 =
new MyDropDownListModel { Key = "Key_1", Options = options_1 };


var values_2 = new List<string> {"Val4", "Val5", "Val6"};
var options_2 =
values_2
.ConvertAll(x => new SelectListItem{Text=x,Value=x})};

var myDropDownListModel_2 =
new MyDropDownListModel { Key = "Key_2", Options = options_2 };


var model =
new MyPageViewModel
{
ListOfDropDownLists =
new List<MyDropDownListModel>
{
myDropDownListModel_1,
myDropDownListModel_2,
}
};

return View(model);
}

Controller 发布操作:

[AcceptVerbs(HttpVerbs.Post)]
[ActionName("MyAction")]
public ActionResult MyPostAction(MyPageViewModel model)
{
//Do something with posted model...
//Except 'model.ListOfDropDownLists' is always null

return View(model);
}

View :

@model MyPageViewModel

@using (Html.BeginForm("MyPostAction"))
{
foreach (var ddl in Model.ListOfDropDownLists)
{
@Html.DropDownListFor(x => ddl.Value, ddl.Options)
}
<button type="submit">Submit</button>
}

编辑:更正拼写错误和复制粘贴错误。


解决方案:

问题原来是 View 中的 foreach 循环。将其更改为 for 循环反而会导致帖子按预期填充。更新后的 View 如下:

@using (Html.BeginForm("MyPostAction"))
{
for (int i = 0; i < Model.ListOfDropDownLists.Count; i++)
{
@Html.HiddenFor(x => x.ListOfDropDownLists[i].Key)
@Html.DropDownListFor(m => m.ListOfDropDownLists[i].Value, Model.ListOfDropDownLists[i].Options);
}
<button type="submit">Submit</button>
}

最佳答案

您的 View 仅创建多个名为 dll.Value(和重复 ID)的选择元素,这些元素与您的模型无关。您需要创建名为 ListOfDropDownLists[0].Value、ListOfDropDownLists[1].Value 等的元素。

将 View 中的循环更改为此

for (int i = 0; i < Model.ListOfDropDownLists.Count; i++)
{
@Html.DropDownListFor(m => m.ListOfDropDownLists[i].Value, Model.ListOfDropDownLists[i].Options);
}

您发布的代码有多个错误(例如,您传递了 MyPageViewModel 类型的模型,但发布操作方法需要 MyModel 类型)。我认为这些只是打字错误。

关于c# - 我如何使用 MVC.Net 模型绑定(bind) 'List<SelectItem>' 的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23841504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com