MVC Asp.net Как передать список сложных объектов из представления в контроллер с помощью Actionlink? - PullRequest
0 голосов
/ 12 августа 2011

У меня есть модель, которая содержит список другой модели.Допустим, у меня есть 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,
    })%>    

Когда я отлаживаю, я вижу, что список фильмов всегда пуст.Это потому, что только примитивные параметры успешно передаются, такие как идентификаторы.Я никогда не был в состоянии пройти сложные типы.Мне действительно нужно, чтобы этот список был передан контроллеру.Может быть, потому что actionlink не способен?Какие другие обходные пути я могу сделать?Я застрял на этом некоторое время.Не берите в голову голый код здесь, это только, чтобы показать Вам, что я делаю со списком.Пожалуйста, помогите.

(продолжение)

В Контроллере есть два действия, 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, а также не работает, если явно передано из actionlink в качестве параметра.помощь!

Ответы [ 2 ]

0 голосов
/ 18 мая 2014

Понятно, что вы не можете передать модели сложных видов через ссылку действия.Есть возможность передавать простые объекты, которые не имеют каких-либо сложных свойств.Есть еще один способ сделать несколько кнопок отправки и отправить сообщение в контроллер.Посредством отправки у вас есть возможность публиковать модели сложного вида

0 голосов
/ 12 августа 2011

Я считаю, что Html.ActionLink выполняет GET, и вы не можете передавать сложные типы данных с помощью GET.

Если бы вы могли обновить список фильмов в вашем контроллере ShowRentDetails, используя ID проката, я думаю, это было бы лучше.

В противном случае вы можете найти шаблоны EditorFor. Если вы создадите редактор для шаблона MovieModel и разместите RentalModel в ShowRentDetails, то вы можете получить список MovieModel таким образом.

См. http://weblogs.asp.net/shijuvarghese/archive/2010/03/06/persisting-model-state-in-asp-net-mvc-using-html-serialize.aspx для другого способа.

На заметку, нет необходимости делать

List<MovieModel> movies

второй параметр в ShowRentDetails, когда он уже включен в модель

Источник: ASP.NET MVC - модель прохождения неполадок в Html.ActionLink routeValues ​​

...