私は別のモデルのリストを含むモデルを持っています。のは、私がMovieModelを持っているとしましょう を:MVC Asp.net Actionlinkを使用して複雑なオブジェクトのリストをビューからコントローラに渡すにはどうすればよいですか?
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,
})%>
私はデバッグするとき、私は作品のリストは常にnullであることがわかります。これは、Idなどのプリミティブパラメータのみが正常に渡されるためです。私は決して複雑な型を渡すことができませんでした。私は実際にこのリストをコントローラに渡す必要があります。アクションリンクが機能しない可能性がありますか?その他の回避策は何ですか?私はしばらくこれに固執してきた。 ここで裸のコードを気にされないようにしてください。これは私がリストで何をやっているのかを示しています。助けてください。コントローラーで
(フォローアップ)
は、ここでは二つの作用、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でそれを設定することはできませんMovieModelではなくムービータイプであるため、2つのリストは互換性がありません。 ShowRentalsビューから渡されたモデルではnullであり、モデルはmvcによって再構築され、アクションリンクからパラメータとして明示的に渡されたときには機能しません。助けて!
オブジェクト全体を送信することが重要ですか、ムービーIDを送信してサーバーにロードできますか? –
私はリスト全体を送る必要があります。それとも、モデル全体を送信するという意味ですか?いずれにしても、コントローラー側のリストにアクセスして詳細ビューページに表示する必要があります – dumbfreak
コントローラーも表示できますか? – Shaokan