c# - 如何将列表从 View 发送到 Controller MVC

标签 c# asp.net-mvc

我有 View 模型:

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>

和 Controller :

public ActionResult BookVisit(DateTime date,List<DateTime> avTimes)
    {
        return View();
    }

问题是:如何将第二个参数从 ActionLink(avTimes=Model.availableTimesList) 发送到 Controller 。换句话说 - 如何将 View 中呈现的列表发送到 Controller 。

最佳答案

首先,在将它作为路由数据值传递之前,您不需要初始化或定义 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)

还有你的 Action 方法:

public ActionResult BookVisit(DateTime date, MyObjectWrapper  avTimes)
{
    vat myList = avTimes.Data;
    return View();
}

希望对您有所帮助。

关于c# - 如何将列表从 View 发送到 Controller MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35610074/

相关文章:

c# - 字典初始化器的类型

c# - 首先使用实体​​框架代码与 nosql 数据库

asp.net-mvc - 如何在不依赖 NHibernate 的情况下实现每个请求的 NHibernate session ?

c# - 向 WebApi 发送动态表单参数?

c# - 如何将文件保存为不同的用户

c# - Linq 左加入组加入

c# - HttpPostedFileBase 转换为 HttpPostedFile

c# - 如何在asp.net mvc中验证PayPal企业电子邮件是否正确

c# - 如何使用 MVC 5 和 Web API 构建 Android 应用程序?

asp.net-mvc - 如何在 ASP.net MVC6 应用程序中更好地组织 resx 文件