J'ai un modèle qui contient une liste d'un autre modèle. Disons que j'ai un MovieModel:MVC Asp.net Comment passer une liste d'objets complexes de la vue au contrôleur en utilisant Actionlink?
public class MovieModel
{
public int MovieId { get; set; }
public string Title { get; set; }
public string Director { get; set; }
}
Ensuite, je dois le RentalModel:
public class RentalModel
{
public int RentalId { get; set; }
public string CustomerId { get; set; }
public List<MovieModel> Movies { get; set; }
}
Puis-je avoir un endroit où toutes les locations sont affichés, qui en cliquant sur la location, ses détails seront afficher, de la « 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,
})%>
Quand je debug, je vois que la liste des films est toujours nulle. Cela est dû au fait que seuls les paramètres primitifs sont passés avec succès, tels que les ID. Je n'ai jamais été capable de passer des types complexes. J'ai vraiment besoin que cette liste soit transmise au contrôleur. Est-ce peut-être parce que le lien d'action n'est pas capable? Quelles autres solutions de rechange puis-je faire? Je suis coincé dessus pendant un moment. Ne cherchez pas le code ici, c'est juste pour vous montrer ce que je fais avec la liste. S'il vous plaît aider.
(suivi)
Dans le contrôleur, voici les deux actions, ShowRentals et 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);
}
Je ne peux pas le mettre en ShowRentals parce que le tableau de films dans la base de données est de Type de film et non MovieModel, donc les deux listes ne sont pas compatibles. Il est nul dans le modèle lorsqu'il est transmis à partir de la vue ShowRentals et le modèle est reconstruit par mvc, et il ne fonctionne pas non plus lorsqu'il est explicitement transmis à partir de l'actionlink en tant que paramètre. Aidez-moi!
Est-il important d'envoyer l'intégralité de l'objet ou d'envoyer un ID de film et de le charger sur le serveur? –
Je dois envoyer la liste entière. Ou vous voulez dire envoyer le modèle entier? De toute façon, j'ai besoin d'accéder à cette liste sur le côté du contrôleur, pour l'afficher sur la page d'affichage des détails – dumbfreak
Puis-je voir votre contrôleur aussi bien? – Shaokan