我有一个包含另一个模型列表的模型。 假设我有一个MovieModel:
public class MovieModel
{
public int MovieId { get; set; }
public string Title { get; set; }
public string Director { get; set; }
}
然后我有RentalModel:
public class RentalModel
{
public int RentalId { get; set; }
public string CustomerId { get; set; }
public List<MovieModel> Movies { get; set; }
}
然后我有一个显示所有租借的地方,通过点击租赁,将显示其详细信息,从“ShowRentals.aspx”到“ShowRentalDetails.aspx”
<% using (Html.BeginForm()) { %>
<% foreach(var rent in Model) { %>
<div class="editor-label">
<div class="editor-field">
<%: rent.RentalId %>
<%: Html.ActionLink("Details", "ShowRentalDetails",
new {rentalId = rent.RentalId,
customerId = rent.CustomerId,
movies = rent.Movies,
})%>
当我调试时,我看到电影列表始终为空。这是因为只有原始参数成功传递,例如Ids。我无法通过复杂的类型。我真的需要将这个列表传递给控制器。可能是因为actionlink没能干吗?我可以做什么其他的解决方案?我已经坚持了一段时间。 没关系这里的裸代码,这只是为了向您展示我正在对列表做什么。请帮忙。
(跟进)
在Controller中,这是两个动作,ShowRentals和ShowRentalDetails:
public ActionResult ShowRentals()
{
MembershipUser user = Membership.GetUser(User.Identity.Name, true);
Guid guid = (Guid)user.ProviderUserKey;
Entities dataContext = new Entities();
Member member = dataContext.Members.Where(m => m.UserID == guid).First();
IEnumerable<RentalModel> toReturn = from r in member.Rentals
select new RentalModel
{
RentalId = m.RentalID,
CustomerId = m.CustomerID,
};
return View(toReturn);
}
[Authorize]
public ActionResult ShowRentalDetails(RentalModel model, List<MovieModel> movies)
{
return View("ShowRentalDetails", model);
}
我无法在ShowRentals中设置它,因为数据库中的电影数组是Movie类型而不是MovieModel,因此这两个列表不兼容。当从ShowRentals视图传递时,它在模型中为null,并且模型由mvc重建,并且当从actionlink作为参数显式传递时它也不起作用。帮助!
答案 0 :(得分:0)
我相信Html.ActionLink执行GET,你不能使用GET传递复杂的数据类型。
如果您可以使用租借ID重新获取ShowRentDetails控制器中的电影列表,我认为这是最好的。
否则,您可以查找EditorFor模板。如果您为MovieModel创建一个编辑器模板并将RentalModel发布到ShowRentDetails,那么您可以通过这种方式获取MovieModel列表。
另一方面,没有必要制作
List<MovieModel> movies
ShowRentDetails中的第二个参数,当它已经包含在模型
中时来源:ASP.NET MVC - Trouble passing model in Html.ActionLink routeValues
答案 1 :(得分:0)
很明显,您无法通过操作链接传递复杂的视图模型。有可能传递没有任何复杂属性的简单对象。还有另一种方法可以作为多个提交按钮并向控制器发送帖子。通过提交,您可以发布复杂的视图模型