[英]How to send list from view to controller MVC
我有视图模型:
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>
话虽如此,您不能将集合作为 Route Data 值传递 - 它不起作用,也不是最佳实践。
由于@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; }
}
然后将其作为您的模型传递。
您还应该使用局部视图来显示您的可用时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.