如何使用MVC 5进行服务器端验证

Tob*_*arp 3 asp.net-mvc entity-framework

我正在一个简单的拍卖网站上为一家慈善机构工作.我有一个销售项目的项目模型,以及一个用户可以输入出价并提交的出价视图.此出价在Item控制器内收到:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Bid(int itemID, int bidAmount)
    {
        if (ModelState.IsValid)
        {
            Item item = db.Items.Find(itemID);
            if (bidAmount >= item.NextBid)
            {
                item.Bids++;
                item.CurrentBid = bidAmount;
                item.HighBidder = HttpContext.User.Identity.Name;
                db.Entry(item).State = EntityState.Modified;
                db.SaveChanges();
            }
            else
            {
                // Already outbid
            }
            return View(item);
        }
        return RedirectToAction("Auction");
    }
Run Code Online (Sandbox Code Playgroud)

我想知道如何向用户显示服务器端验证.例如,在上面的代码中,提交的出价金额可能不再足够.在这种情况下,我想向用户显示他们已经出价等的消息.

如何将此信息传递回视图以显示相应的消息?我希望用户看到与以前相同的项目页面视图,更新编辑框中的值并显示消息 - 类似于eBay.谢谢.

And*_*mer 14

您应该看一下ModelState属性的AddModelError方法.

   [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Bid(int itemID, int bidAmount)
    {
        if (ModelState.IsValid)
        {
            Item item = db.Items.Find(itemID);
            if (bidAmount >= item.NextBid)
            {
                item.Bids++;
                item.CurrentBid = bidAmount;
                item.HighBidder = HttpContext.User.Identity.Name;
                db.Entry(item).State = EntityState.Modified;
                db.SaveChanges();
            }
            else
            {
                // Already outbid
                ModelState.AddModelError("", "Already outbid");
            }
            return View(item);
        }
        return RedirectToAction("Auction");
    }
Run Code Online (Sandbox Code Playgroud)

要在视图中显示消息,您需要ValidationSummary

@ Html.ValidationSummary(真)

  • 或者你可以使用`ModelState.AddModelError(string.Empty,"Already outbid");` (3认同)