【问题标题】:ASP.NET MVC record status [closed]ASP.NET MVC 记录状态 [关闭]
【发布时间】:2014-03-11 10:12:06
【问题描述】:

我正在用 ASP.NET MVC 构建拍卖系统。

如何让我的项目类的状态在结束日期过后显示“已完成”。

到目前为止,我已经创建了 Item 模型:

    public class Item
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int ItemId { get; set; }
    [StringLength(100, ErrorMessage = "The {0} must be between {1} and {2} characters length", MinimumLength = 6)]
    public string Title { get; set; }
    [DataType(DataType.DateTime)]
    public DateTime StartDate { get; set; }
    [DataType(DataType.DateTime)]
    public DateTime EndDate { get; set; }
    public decimal StartingPrice { get; set; }

    [StringLength(4000, ErrorMessage = "Description must be no longer than {1}")]
    public string Description { get; set; }
    public string Image { get; set; }
    public string Status { get; set; }

    public virtual UserProfile UserProfile { get; set; }
    public virtual ICollection<Bid> Bids { get; set; }

}

和一个 ViewModel:

    public class ViewItemViewModel
{
   // [HiddenInput(DisplayValue = false)]
    public int ItemId { get; set; }
    public string Title { get; set; }
    private DateTime endDate;
    [Required]
    [DataType(DataType.DateTime)]
    public DateTime EndDate
    {
        get { return endDate; }
        set
        {
            TimeSpan span = (value - DateTime.Now);
            TimeLeft = String.Format("{0} d, {1} h, {2} m, {3} s left", span.Days, span.Hours, span.Minutes, span.Seconds);
            endDate = value;
        }
    }

    public string TimeLeft { get; private set; }

    [StringLength(4000, ErrorMessage = "Description must be no longer than {1}")]
    public string Description { get; set; }
    public string Image { get; set; }
}

【问题讨论】:

标签: c# asp.net sql .net asp.net-mvc


【解决方案1】:

我很难理解您的要求,但是假设您只想在拍卖未完成时允许出价然后在您的项目详细信息视图中添加一个用于出价的小表单( Auction Item 页面),它将 Bid CreateModelItemID + Bid Amount 传递给控制器​​上的 Bid 操作。

您的控制器操作可能类似于:

public ActionResult Bid(int itemid, decimal bidAmount)
    {
        Item item = db.Items.Find(itemid);
        if (item.EndDate < DateTime.Now)
        {
            // Too late, the auction is over
            return View("AuctionComplete");
        }
        if (bidAmount > item.Bids.OrderByDescending(b => b.Value).First().Value);
        {
            // Valid bid, add to db and return view
            db.Bids.Add(new Bid() { ItemID = itemid, Value = bidAmount });
            db.SaveChanges();
            return View();
        }
        // There is a higher bid than this one already
        return View("Outbid");
    }

编辑

public string Status { get { return EndDate < DateTime.Now ? "Finished" : "Not Finished"; } }

我个人会实现一个名为“完成”或“完成”的布尔属性,然后在其他计算/决策中使用它。示例:

public bool Finished { get { return EndDate < DateTime.Now; } }
public string Status { get { return Finished ? "Finished" : "Live"; } }

编辑 2

您可以运行一个服务,使用以下内容查询数据库:

UPDATE Items SET Status = 'Finished' WHERE EndDate < GETDATE()

或者您可以创建一个计算列或视图来在运行时计算数据库中的值。

【讨论】:

  • 我不知道何时以及如何将拍卖状态更改为已完成。
  • 您可以使用逻辑在运行时/根据请求生成状态(请参阅上面我编辑的答案),或者有一个单独的服务来定期检查和更新状态(在这种情况下不推荐,因为它是拍卖)。
  • 但我也想更改数据库中的状态值。这只返回字符串。
  • 你能至少展示一个吗?
  • 抱歉,StackOverflow 阻止我编辑我的评论。您可以通过多种方式完成此操作。您可以使用定期查询数据库的服务来根据 EndDate 更新所有项目的状态,或者使用 SQL Server 中的视图或计算列,或者只是以编程方式进行。请参阅编辑 2。
猜你喜欢
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
相关资源
最近更新 更多