我的控制器中有以下GET方法:
public ActionResult GetLinesByDestination()
{
destinationService = new DestinationService();
ViewBag.Destination_id = new SelectList(destinationService.All(), "Destination_id", "city");
lineService = new LineService();
ViewBag.Lines = new SelectList(lineService.All(), "line_id", "arrival");
return View();
}
POST方法:
[HttpPost]
public ActionResult GetLinesByDestination(int? Destination_id)
{
destinationService = new DestinationService();
ViewBag.Destination_id = new SelectList(destinationService.All(), "Destination_id", "city", Destination_id);
lineService = new LineService();
ViewBag.Lines = new SelectList(lineService.GetLinesByDestination(Convert.ToInt16(Destination_id)), "line_id", "arrival").ToList();
return View();
}
查看代码:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.Label("Destinations", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("Destination_id", null, "- Select a destination you want to depart from -", htmlAttributes: new { @class = "form -control" })
@Html.ValidationMessage("Destination_id", "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.Label("Lines", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("Lines", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessage("Lines", "", new { @class = "text-danger" })
</div>
执行GET时,所有这一切都会检索我的数据库中所有目的地和所有行的列表。但是,点击“提交”后,因此,执行POST方法时,只应显示离开用户所选目的地的行。这完全正常。
现在我的实际问题是:
Destination_id ViewBag应该仍然是视图中的下拉列表,因为用户必须从此处选择一个选项。不过,我喜欢在视图中显示为列表的行(例如&lt; li&gt;),因此不是下拉列表。我该怎么做呢?我之前尝试过一些foreach循环但是没有用。
答案 0 :(得分:0)
通过您的选择列表进行迭代
您应该能够通过引用绑定到Text
时设置的Value
和SelectList
属性来按预期迭代ViewBag集合:
@if (ViewBag.Lines != null) {
<ul>
@foreach (var line in ViewBag.Lines){
<li>
@line.Text - @line.Value
</li>
}
</ul>
}
为了便于使用,您可以考虑将此集合实际绑定到特定的类而不是SelectList
,这不仅可以在View中强大地键入,而且还允许您包含/引用属性除了Text
和Value
。
绑定您的值
就实际发布选择&#34;选择&#34;的值而言,您可能会考虑为每个列表项输出复选框值,然后存储与该项相关的属性,这些属性可以发布到您的表单:
<ul>
@foreach (var line in ViewBag.Lines){
<li>
@line.Text - @line.Value
<input type='checkbox' name='lines[]' value='@line.Value' / >
</li>
}
</ul>
这将假设你想要回发一个代表&#34;值&#34;的值数组。每个选定的行。同样,如果您只想包含一个选项,则可以使用单选按钮替换这些选项,并确保name
属性正确绑定到您的destination_id
属性:
<ul>
@foreach (var line in ViewBag.Lines){
<li>
@line.Text - @line.Value
<input type='radio' name='Destination_id' value='@line.Value' / >
</li>
}
</ul>