在HTML表ASP.Net MVC上设置ListBox选定值

在HTML表ASP.Net MVC上设置ListBox选定值,html,asp.net-mvc,listbox,Html,Asp.net Mvc,Listbox,我在设置HTML表中列表框的选定值时遇到问题。检索所选值不是问题,而是在页面加载时设置其值 HTML: @model MVCSample.Models.SampleViewModel <h2>Index</h2> @using (Html.BeginForm()) { <div class="container-fluid"> <div class="row"> <div class="col-lg-6">

我在设置HTML表中列表框的选定值时遇到问题。检索所选值不是问题,而是在页面加载时设置其值

HTML:

@model MVCSample.Models.SampleViewModel

<h2>Index</h2>

@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
    public class SampleViewModel
    {
        public SelectList List { get; set; }
        public List<SampleDetailsViewModel> Details { get; set; }
    }

    public class SampleDetailsViewModel
    {
        public string Name { get; set; }
        public string[] Selected { get; set; }
    }
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new SelectList(new[] { "1", "2", "3" });

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected= new[]{"1"}
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new SelectList(new[] { "1", "2", "3" });
        return View(model);
    }

}
}
@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
    public IEnumerable<OptionViewModel> List { get; set; }
    public List<SampleDetailsViewModel> Details { get; set; }
}

public class OptionViewModel
{
    public string ID { get; set; }
    public string Name { get; set; }
}

public class SampleDetailsViewModel
{
    public string Name { get; set; }
    public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected = new OptionViewModel() { ID = "1", Name = "1" }
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
        return View(model);
    }

}
@model MVCSample.Models.SampleViewModel
指数
@使用(Html.BeginForm())
{

名称 挑选 @for(int i=0;imodel.Details[i].Name) @Html.DisplayFor(model=>model.Details[i].Name) @Html.ListBoxFor(model=>model.Details[i]。选中,model.List,新建{@class=“form control”,multiple=“multiple”}) } }
型号:

@model MVCSample.Models.SampleViewModel

<h2>Index</h2>

@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
    public class SampleViewModel
    {
        public SelectList List { get; set; }
        public List<SampleDetailsViewModel> Details { get; set; }
    }

    public class SampleDetailsViewModel
    {
        public string Name { get; set; }
        public string[] Selected { get; set; }
    }
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new SelectList(new[] { "1", "2", "3" });

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected= new[]{"1"}
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new SelectList(new[] { "1", "2", "3" });
        return View(model);
    }

}
}
@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
    public IEnumerable<OptionViewModel> List { get; set; }
    public List<SampleDetailsViewModel> Details { get; set; }
}

public class OptionViewModel
{
    public string ID { get; set; }
    public string Name { get; set; }
}

public class SampleDetailsViewModel
{
    public string Name { get; set; }
    public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected = new OptionViewModel() { ID = "1", Name = "1" }
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
        return View(model);
    }

}
namespace MVCSample.Models
{
公共类SampleViewModel
{
公共选择列表{get;set;}
公共列表详细信息{get;set;}
}
公共类示例详细信息视图模型
{
公共字符串名称{get;set;}
公共字符串[]已选择{get;set;}
}
}
控制器:

@model MVCSample.Models.SampleViewModel

<h2>Index</h2>

@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
    public class SampleViewModel
    {
        public SelectList List { get; set; }
        public List<SampleDetailsViewModel> Details { get; set; }
    }

    public class SampleDetailsViewModel
    {
        public string Name { get; set; }
        public string[] Selected { get; set; }
    }
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new SelectList(new[] { "1", "2", "3" });

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected= new[]{"1"}
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new SelectList(new[] { "1", "2", "3" });
        return View(model);
    }

}
}
@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
    public IEnumerable<OptionViewModel> List { get; set; }
    public List<SampleDetailsViewModel> Details { get; set; }
}

public class OptionViewModel
{
    public string ID { get; set; }
    public string Name { get; set; }
}

public class SampleDetailsViewModel
{
    public string Name { get; set; }
    public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected = new OptionViewModel() { ID = "1", Name = "1" }
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
        return View(model);
    }

}
namespace MVCSample.Controllers
{
公共类SampleController:控制器
{
公共行动结果索引()
{
SampleViewModel模型=新的SampleViewModel();
model.List=newselectlist(new[]{“1”、“2”、“3”});
model.Details=新列表(){
新样本详细信息视图模型{
Name=“Sample1”,
选定=新[]{“1”}
}
};
返回视图(模型);
}
[HttpPost]
公共行动结果索引(SampleViewModel模型)
{
model.List=newselectlist(new[]{“1”、“2”、“3”});
返回视图(模型);
}
}
}
如您所见,在声明model.Details的值时,我将所选值设置为1

但在下图中,页面加载后未选择任何值

目标:能够在页面加载时设置HTML表格上ListBox的选定值。

建议的解决方案:

@model MVCSample.Models.SampleViewModel

<h2>Index</h2>

@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
    public class SampleViewModel
    {
        public SelectList List { get; set; }
        public List<SampleDetailsViewModel> Details { get; set; }
    }

    public class SampleDetailsViewModel
    {
        public string Name { get; set; }
        public string[] Selected { get; set; }
    }
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new SelectList(new[] { "1", "2", "3" });

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected= new[]{"1"}
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new SelectList(new[] { "1", "2", "3" });
        return View(model);
    }

}
}
@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
    public IEnumerable<OptionViewModel> List { get; set; }
    public List<SampleDetailsViewModel> Details { get; set; }
}

public class OptionViewModel
{
    public string ID { get; set; }
    public string Name { get; set; }
}

public class SampleDetailsViewModel
{
    public string Name { get; set; }
    public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected = new OptionViewModel() { ID = "1", Name = "1" }
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
        return View(model);
    }

}
查看:

@model MVCSample.Models.SampleViewModel

<h2>Index</h2>

@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
    public class SampleViewModel
    {
        public SelectList List { get; set; }
        public List<SampleDetailsViewModel> Details { get; set; }
    }

    public class SampleDetailsViewModel
    {
        public string Name { get; set; }
        public string[] Selected { get; set; }
    }
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new SelectList(new[] { "1", "2", "3" });

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected= new[]{"1"}
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new SelectList(new[] { "1", "2", "3" });
        return View(model);
    }

}
}
@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
    public IEnumerable<OptionViewModel> List { get; set; }
    public List<SampleDetailsViewModel> Details { get; set; }
}

public class OptionViewModel
{
    public string ID { get; set; }
    public string Name { get; set; }
}

public class SampleDetailsViewModel
{
    public string Name { get; set; }
    public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected = new OptionViewModel() { ID = "1", Name = "1" }
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
        return View(model);
    }

}
@使用(Html.BeginForm())
{

名称 挑选 @for(int i=0;imodel.Details[i].Name) @Html.DisplayFor(model=>model.Details[i].Name) @Html.DropDownListFor(model=>model.Details[i]。选中,新建SelectList(model.List,“ID”,“Name”,model.Details[i]。选中),新建{@class=“form control”,multiple=“multiple”}) } }
型号:

@model MVCSample.Models.SampleViewModel

<h2>Index</h2>

@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
    public class SampleViewModel
    {
        public SelectList List { get; set; }
        public List<SampleDetailsViewModel> Details { get; set; }
    }

    public class SampleDetailsViewModel
    {
        public string Name { get; set; }
        public string[] Selected { get; set; }
    }
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new SelectList(new[] { "1", "2", "3" });

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected= new[]{"1"}
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new SelectList(new[] { "1", "2", "3" });
        return View(model);
    }

}
}
@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
    public IEnumerable<OptionViewModel> List { get; set; }
    public List<SampleDetailsViewModel> Details { get; set; }
}

public class OptionViewModel
{
    public string ID { get; set; }
    public string Name { get; set; }
}

public class SampleDetailsViewModel
{
    public string Name { get; set; }
    public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected = new OptionViewModel() { ID = "1", Name = "1" }
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
        return View(model);
    }

}
namespace MVCSample.Models
{
公共类SampleViewModel
{
公共IEnumerable列表{get;set;}
公共列表详细信息{get;set;}
}
公共类选项视图模型
{
公共字符串ID{get;set;}
公共字符串名称{get;set;}
}
公共类示例详细信息视图模型
{
公共字符串名称{get;set;}
公共选项ViewModel已选择{get;set;}
}
}

控制器:

@model MVCSample.Models.SampleViewModel

<h2>Index</h2>

@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
    public class SampleViewModel
    {
        public SelectList List { get; set; }
        public List<SampleDetailsViewModel> Details { get; set; }
    }

    public class SampleDetailsViewModel
    {
        public string Name { get; set; }
        public string[] Selected { get; set; }
    }
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new SelectList(new[] { "1", "2", "3" });

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected= new[]{"1"}
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new SelectList(new[] { "1", "2", "3" });
        return View(model);
    }

}
}
@using (Html.BeginForm())
{

<div class="container-fluid">
    <div class="row">
        <div class="col-lg-6">
            <input type="submit" value="Submit" />
            <hr />
            <table class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Select</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < Model.Details.Count(); i++)
                    {
                        @Html.HiddenFor(model => model.Details[i].Name)

                        <tr>
                            <td>@Html.DisplayFor(model => model.Details[i].Name)</td>
                            <td>
                                @Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
    public IEnumerable<OptionViewModel> List { get; set; }
    public List<SampleDetailsViewModel> Details { get; set; }
}

public class OptionViewModel
{
    public string ID { get; set; }
    public string Name { get; set; }
}

public class SampleDetailsViewModel
{
    public string Name { get; set; }
    public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
    public ActionResult Index()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };

        model.Details = new List<SampleDetailsViewModel>() { 
            new SampleDetailsViewModel {
                Name="Sample1", 
                Selected = new OptionViewModel() { ID = "1", Name = "1" }
            }
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SampleViewModel model)
    {
        model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
        return View(model);
    }

}
公共类示例控制器:控制器
{
公共行动结果索引()
{
SampleViewModel模型=新的SampleViewModel();
model.List=newoptionviewmodel[]{newoptionviewmodel(){ID=“1”,Name=“1”},newoptionviewmodel(){ID=“2”,Name=“2”};
model.Details=新列表(){
新样本详细信息视图模型{
Name=“Sample1”,
Selected=newoptionViewModel(){ID=“1”,Name=“1”}
}
};
返回视图(模型);
}
[HttpPost]
公共行动结果索引(SampleViewModel模型)
{
model.List=newoptionviewmodel[]{newoptionviewmodel(){ID=“1”,Name=“1”},newoptionviewmodel(){ID=“2”,Name=“2”};
返回视图(模型);
}
}
不幸的是,ListBoxFor()和DropDownListFor()在for循环中不能正常工作。给出两种可能的解决方案-使用自定义的
编辑器或模板
处理
样本详细信息视图模型
的类型,并将
选择列表
作为附加视图数据传递到模板,或在循环的每次迭代中创建新的
多选择列表

根据您的编辑,您尝试了第二个选项,但是您的代码包含一些错误

只能绑定到值类型数组(而不是复杂对象(在您的情况下是
选项ViewModel
)。将视图模型更改为

public class SampleDetailsViewModel
{
    public string Name { get; set; }
    // public OptionViewModel Selected { get; set; }
    public string[] Selected { get; set; } // change this
}
初始化视图模型时在控制器中

model.Details = new List<SampleDetailsViewModel>()
{ 
    new SampleDetailsViewModel
    {
        Name="Sample1",  
        // Selected = new OptionViewModel() { ID = "1", Name = "1" },
        Selected = new string[] { "1" } // change this
    }
};
不幸的是,ListBoxFor()和DropDownListFor()是在for循环中无法正常工作。给出了两种可能的解决方案-对typeof
SampleDetailsViewModel
使用自定义的
EditorTemplate
,并将
SelectList
作为附加视图数据传递给模板,或在循环的每次迭代中创建一个新的
MultiSelectList

根据您的编辑,您尝试了第二个选项,但是您的代码包含一些错误

只能绑定到值类型数组(而不是复杂对象)(在您的示例中是
选项ViewModel