如何将模型 属性 的变化值复制或获取到另一个模型?
How to copy or get a changing value of a model property to another model?
我正在使用 C# MVC 创建 Web 应用程序。我创建了一个名为 Trip.cs
的模型,其属性如下:
public int ID {get; set;}
public string Destination {get; set;}
public DateTime DepartureDate {get; set;}
public string MeetPlace {get; set;}
public int NumberOfSeats {get; set;}
public virtual ApplicationUser User { get; set; }
public string UserId { get; set; }
我创建了另一个名为 ReservedTrip.cs
的模型,与 Trip.cs
具有相同的属性。
我所做的是当登录用户单击名为“Reserve Trip”的 Actionlink
时,我将此“Trip”保存到 ReservedTrip.cs
并减少 属性 [=17= 的数量] 和 1。换句话说,我将此“行程”数据从 Trip.cs
复制到 ReservedTrip.cs
。问题是当我在视图中显示来自模型 Trip.cs
的数据时,NumberOfSeats
的数量发生了变化,但在模型 ReservedTrip.cs
中 属性 NumberOfSeats
没有不改变。所以我希望模型 Trip.cs 的 属性 NumberOfSeats
的更改在 属性 NumberOfSeats
中更改为相同的值。
谁能帮帮我?
从设计的角度来看,最好不要复制任何 table。针对这种情况的好的设计可以是这样的。
public class Trip
{
public int ID {get; set;}
public string Destination {get; set;}
public DateTime DepartureDate {get; set;}
public string MeetPlace {get; set;}
public int NumberOfSeats {get; set;}
public int CreatedByUserID {get; set;}
public virtual ApplicationUser CreatedByUser {get; set;}
public virtual ICollection<TripReservation> Reservations {get;set;}
}
public class TripReservation
{
public int ID {get; set;}
public int TripID {get; set;}
public int UserID {get; set;}
public virtual Trip Trip {get; set;}
public virtual ApplicationUser User {get; set;}
}
然后在您的控制器中,您可以构建一个视图模型,其中可用座位数为
numberOfSeatsAvailable = trip.NumberOfSeats - trip.Reservations.Count();
如果一个预订可以保留超过 1 个座位,您可以从该行程的所有预订中求和。
示例:ViewModel
public class TripReservationsViewModel
{
public Trip Trip { get; set; }
public int NumberOfSeatsAvailable { get; set; }
}
示例:控制器
public ActionResult TripDetails(int id)
{
var trip = db.Trips.FirstOrDefault(trip => trip.ID == id);
if (trip == null)
{
// Trip does not exist,
// Redirect the user to the trips home page
//
return RedirectToAction("Index");
}
var viewModel = new TripReservationsViewModel();
viewModel.Trip = trip;
viewModel.NumberOfSeatsAvailable = trip.NumberOfSeats - trip.Reservations.Count();
return View(viewModel);
}
示例:查看
@model TripReservationsViewModel
<h1>Trip Details</h1>
<p>Seats available: @Model.NumberOfSeatsAvailable</p>
etc...
我正在使用 C# MVC 创建 Web 应用程序。我创建了一个名为 Trip.cs
的模型,其属性如下:
public int ID {get; set;}
public string Destination {get; set;}
public DateTime DepartureDate {get; set;}
public string MeetPlace {get; set;}
public int NumberOfSeats {get; set;}
public virtual ApplicationUser User { get; set; }
public string UserId { get; set; }
我创建了另一个名为 ReservedTrip.cs
的模型,与 Trip.cs
具有相同的属性。
我所做的是当登录用户单击名为“Reserve Trip”的 Actionlink
时,我将此“Trip”保存到 ReservedTrip.cs
并减少 属性 [=17= 的数量] 和 1。换句话说,我将此“行程”数据从 Trip.cs
复制到 ReservedTrip.cs
。问题是当我在视图中显示来自模型 Trip.cs
的数据时,NumberOfSeats
的数量发生了变化,但在模型 ReservedTrip.cs
中 属性 NumberOfSeats
没有不改变。所以我希望模型 Trip.cs 的 属性 NumberOfSeats
的更改在 属性 NumberOfSeats
中更改为相同的值。
谁能帮帮我?
从设计的角度来看,最好不要复制任何 table。针对这种情况的好的设计可以是这样的。
public class Trip
{
public int ID {get; set;}
public string Destination {get; set;}
public DateTime DepartureDate {get; set;}
public string MeetPlace {get; set;}
public int NumberOfSeats {get; set;}
public int CreatedByUserID {get; set;}
public virtual ApplicationUser CreatedByUser {get; set;}
public virtual ICollection<TripReservation> Reservations {get;set;}
}
public class TripReservation
{
public int ID {get; set;}
public int TripID {get; set;}
public int UserID {get; set;}
public virtual Trip Trip {get; set;}
public virtual ApplicationUser User {get; set;}
}
然后在您的控制器中,您可以构建一个视图模型,其中可用座位数为
numberOfSeatsAvailable = trip.NumberOfSeats - trip.Reservations.Count();
如果一个预订可以保留超过 1 个座位,您可以从该行程的所有预订中求和。
示例:ViewModel
public class TripReservationsViewModel
{
public Trip Trip { get; set; }
public int NumberOfSeatsAvailable { get; set; }
}
示例:控制器
public ActionResult TripDetails(int id)
{
var trip = db.Trips.FirstOrDefault(trip => trip.ID == id);
if (trip == null)
{
// Trip does not exist,
// Redirect the user to the trips home page
//
return RedirectToAction("Index");
}
var viewModel = new TripReservationsViewModel();
viewModel.Trip = trip;
viewModel.NumberOfSeatsAvailable = trip.NumberOfSeats - trip.Reservations.Count();
return View(viewModel);
}
示例:查看
@model TripReservationsViewModel
<h1>Trip Details</h1>
<p>Seats available: @Model.NumberOfSeatsAvailable</p>
etc...