【发布时间】:2014-05-18 05:43:32
【问题描述】:
我有一个模型,其中包含另一个模型的列表。 假设我有一个 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,
})%>
调试时,我看到电影列表始终为空。这是因为只有原始参数才能成功传递,例如 Id。我永远无法传递复杂的类型。我真的需要将此列表传递给控制器。是不是因为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 视图传递并且模型由 mvc 重构时,它在模型中为 null,并且当从 actionlink 作为参数显式传递时它也不起作用。帮忙!
【问题讨论】:
-
发送整个对象是否重要,或者您可以发送电影 ID 并将其加载到服务器上吗?
-
我需要发送整个列表。或者你的意思是发送整个模型?无论哪种方式,我都需要在控制器端访问该列表,以将其显示在详细信息视图页面上
-
我可以看看你的控制器吗?
标签: model-view-controller list controller models parameter-passing