I am working on a simple auction website for a charity. I have an Item
model for the sale items, and a Bid
view where the user can enter a bid and submit it. This bid is received inside the Item controller:
[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");
}
I would like to know how to display server-side validation to the user. For example, in the above code, it may be that the submitted bid amount is no longer sufficient. In that case, I would like to display a message to the user that they have been outbid etc.
How can I pass this information back to the view to display an appropriate message? I want the user to see the same item page view as before, updating the value in the edit box and displaying the message - similar to eBay. Thanks.
RedirectToAction
afterdb.SaveChanges
. You should not useRedirectToAction
if theModelState
is not valid. You want to return the view and pass the model to preserve any validation messages and keep the state as it was. Redirecting will lose any validation messages in theModelState
. – Seaborne