Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Razor视图上保存未知数量的相同下拉列表_C#_Asp.net Mvc_Asp.net Mvc 3_Razor - Fatal编程技术网

C# 在Razor视图上保存未知数量的相同下拉列表

C# 在Razor视图上保存未知数量的相同下拉列表,c#,asp.net-mvc,asp.net-mvc-3,razor,C#,Asp.net Mvc,Asp.net Mvc 3,Razor,我遵循了Steve Sanderson的“编辑可变长度列表,ASP.NET MVC 2样式”指南,创建了一个MVC视图来编辑项目列表。注意,我使用的是MVC3,所以我不确定是否有更好的方法来实现这一点 我的问题是列表中的一个字段是下拉列表。我已经设法在每一行上填充了下拉列表,但是当页面加载时,它没有加载所选的值。不过,它正在保存所选值,但每次编辑页面时,我都需要重新设置所有下拉列表 有人知道如何为局部视图上的每个“行”设置选定的下拉列表值吗 我的编辑视图已更改 @foreach (var ite

我遵循了Steve Sanderson的“编辑可变长度列表,ASP.NET MVC 2样式”指南,创建了一个MVC视图来编辑项目列表。注意,我使用的是MVC3,所以我不确定是否有更好的方法来实现这一点

我的问题是列表中的一个字段是下拉列表。我已经设法在每一行上填充了下拉列表,但是当页面加载时,它没有加载所选的值。不过,它正在保存所选值,但每次编辑页面时,我都需要重新设置所有下拉列表

有人知道如何为局部视图上的每个“行”设置选定的下拉列表值吗

我的编辑视图已更改

@foreach (var item in Model.Roles)
{
    @Html.Partial("RoleRow-Edit", item)
}
我的偏颇观点已经过时了

@using (Html.BeginCollectionItem("Roles"))
{
    @Html.EditorFor(model => model.TemplateID)
    @Html.DropDownList("PartyRoleID", (SelectList)ViewBag.PartyRoles)
    @Html.EditorFor(model => model.DisplayName)
}
我的控制器上有

ViewBag.PartyRoles = new SelectList(db.PartyRoles.OrderBy(c => c.Role), "Role", "Role");

我看不到您的代码中有任何地方可以设置
PartyRoleID
值。我建议您使用视图模型和强类型视图,而不是
ViewBag

@Html.DropDownListFor(x => x.PartyRoleID, Model.PartyRoles)
现在,您只需在控制器上设置视图模型的值:

var roles = db.PartyRoles.OrderBy(c => c.Role);
var model = new MyViewModel();
// preselect the value of the dropdown
// this value must correspond to one of the values inside the roles collection
model.PartyRoleID = "admin";
model.PartyRoles = new SelectList(roles, "Role", "Role");
return View(model);
此外,我建议您使用编辑器模板并替换以下foreach循环:

@foreach (var item in Model.Roles)
{
    @Html.Partial("RoleRow-Edit", item)
}
通过以下方式:

@Html.EditorFor(x => x.Roles)

现在只剩下自定义相应的选项了。

我找到了一个解决方法:您应该在局部视图中创建SelectList,并将其初始值设置为有界值,因此局部视图将如下所示:

@{var selectList = new SelectList(db.PartyRoles.OrderBy(c => c.Role), 
                                 "Role", "Role",Model.PartyRoleID);} 
/*pass the db.PartyRoles.OrderBy(c => c.Role) in view bag inside controller,
it's cleaner*/

@using (Html.BeginCollectionItem("Roles"))
{
  @Html.EditorFor(model => model.TemplateID)
  @Html.DropDownList(model => model.PartyRoleID, selectList)
  @Html.EditorFor(model => model.DisplayName)
}

我也有同样的问题,解决不了