首页 > 解决方案 > 如何将模型属性的更改值复制或获取到另一个模型?

问题描述

我正在使用 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我所做的是,当登录的用户单击Actionlink名为“预订旅行”时,我将此“旅行”保存到 ,ReservedTrip.cs并将属性数量减少为NumberOfSeats1。换句话说,我将此“旅行”数据从 复制Trip.csReservedTrip.cs。问题是当我在视图中显示模型中的数据时Trip.cs,更改的数量NumberOfSeats,但在模型ReservedTrip.cs中属性NumberOfSeats没有改变。所以我希望NumberOfSeats模型 Trip.cs 的属性NumberOfSeats更改以相同的值更改属性。

谁能帮我?

标签: c#modelcopy

解决方案


从设计的角度来看,最好不要有任何表的副本。针对这种情况的一个好的设计可以是这样的。

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 个座位,您可以从该行程的所有预订中求和。

示例:视图模型

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...

推荐阅读