この質問はあちこちで繰り返し見られるかもしれませんが、答えを見つけることができませんでした。
私のプロジェクトはホテルの予約に関するものです。クラス Reservation witch には、ChoosenRooms の Icollection と、予約を行うユーザーを表すクラス、および日付やその他のものがあります。
プロセスは次のとおりです。
最初のビューでは、選択した部屋、日付などを取得し、それを 2 番目のビューに渡し、ユーザー情報を取得します。次に、収集したすべての情報を表示する 3 番目のビューがあるので、ユーザーは最終的にボタンをクリックしてデータを保存できます。
私の問題は、これらすべてのビューで予約オブジェクト クラスを渡す必要があることです。私のテストでは、プリミティブ型が問題なく通過することがわかりましたが、ビューから次のコントローラー アクションにポスト バックすると、ChoosenRooms の iColletion が失われます。
ビューからコントローラーへのポストバック、別のクラスの予約内のChoosenRoomsのような複雑なタイプがプロセスで失われない方法の例を誰かが投稿できますか?
または、この情報が失われた理由を説明してください。
コード:
public class Reserva
{
public virtual int ID { get; set; }
[NotMapped]
public string[] q { get; set; }
[Display(Name = "Cliente")]
public virtual Utilizador utilizador { get; set; }
[Display(Name = "Quarto")]
public virtual ICollection<Quartos> ChoosenRooms{ get; set; }
[Display(Name = "Serviços Adicionais")]
public virtual ICollection<ReservasItens> itens { get; set; }
景色
@model SolarDeOura.Models.Reserva
@{
ViewBag.Title = "AddReservaUser";
var _reserva = TempData["reserva"] as Reserva;
}
<h2>AddReservaUser</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Reserva</legend>
<div class="editor-label">
@Html.LabelFor(model => model.dtEntrada)
</div>
<div class="editor-field">
@Html.DisplayFor(model => model.dtEntrada)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.dtSaida)
</div>
<div class="editor-field">
@Html.DisplayFor(model => model.dtSaida)
</div>
<div class="editor-label">
@Model.q.Count() Choosen Rooms
</div>
@foreach (var q in Model.ChoosenRooms)
{
<ul>
<li>
@Html.DisplayFor(modelitem => q.descricao)
</li>
</ul>
}
ここからの投稿が問題です。このビューでは、「 @foreach (Model.ChoosenRooms の var q)」にデータがありますが、データのポスト バックは失われます。