如何将列表从视图发送到控制器 MVC
本文关键字:控制器 MVC 视图 列表 | 更新日期: 2023-09-27 18:36:13
我有视图模型:
public class AvailableTimesViewModel
{
public AvailableTimesViewModel() { }
public AvailableTimesViewModel(List<DateTime> list)
{
availableTimesList = new List<DateTime>();
if (list != null && list.Any())
{
foreach (var l in list)
{
availableTimesList.Add(l);
}
}
}
public List<DateTime> availableTimesList { get; set; }
}
我的观点:
@model ViewModels.AvailableTimesViewModel
@{
ViewBag.Title = "AvailableTimes";
}
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
List<DateTime>avTimes=new List<DateTime>
@for (var i = 0; i < Model.availableTimesList.Count; i++)
{
<tr>
<td>
@Html.HiddenFor(x => x.availableTimesList[i])
@Model.availableTimesList[i].TimeOfDay
@Html.ActionLink("Book", "BookVisit", new { date = Model.availableTimesList[i].TimeOfDay, avTimes = Model.availableTimesList },null) |
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
</td>
</tr>
}
</table>
和控制器:
public ActionResult BookVisit(DateTime date,List<DateTime> avTimes)
{
return View();
}
问题是:如何将第二个参数从ActionLink(avTimes=Model.availableTimesList)发送到控制器。换句话说 - 如何将视图中呈现的列表发送到控制器。
首先,在将avTimes
作为路由数据值传递之前,您不需要初始化或定义它。不需要此行:
List<DateTime>avTimes = new List<DateTime>
话虽如此,您不能将集合作为路由数据值传递 - 它不起作用,无论如何都不是最佳实践。
由于@Html.ActionLink
会产生像http://domainname.com/bookvisit/book?abc=1&bcd=ldf&ctf=5
这样的链接,我认为在 url 中附加完整的列表值不是一个好的做法。
您正在尝试做的事情可以通过以下方式实现:
@{var myObjectWrapper = new MyObjectWrapper(){Data = @Model.availableTimesList };}
@Html.Action("Book", "BookVisit",
new { date = Model.availableTimesList[i].TimeOfDay, avTimes = myObjectWrapper } ,null)
以及您的操作方法:
public ActionResult BookVisit(DateTime date, MyObjectWrapper avTimes)
{
vat myList = avTimes.Data;
return View();
}
希望有帮助。
将"列表"添加到 AvailableTimesViewModel
public class AvailableTimesViewModel
{
public string MyFirstProperty { get; set; }
public List<DateTime> availableTimesList { get; set; }
}
然后将其作为模型传递。
您还应该使用部分视图来显示您的可用时间。