我正在为一家慈善机构开设一个简单的拍卖网站。我有一个销售项目的项目模型,以及一个用户可以输入出价并提交的出价视图。此出价在项目控制器内收到:
[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");
}
我想知道如何向用户显示服务器端验证。例如,在上面的代码中,提交的出价金额可能不再足够。在这种情况下,我想向用户显示他们已经出价等的消息。
如何将此信息传回视图以显示相应的消息?我希望用户看到与以前相同的项目页面视图,更新编辑框中的值并显示消息 - 类似于eBay。感谢。
答案 0 :(得分: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");
}
要在视图中显示消息,您需要ValidationSummary
@ Html.ValidationSummary(真)
答案 1 :(得分:0)
为更好地理解服务器端验证,下面提供了服务器端电影名称验证的代码段
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateMovie(Movie movie)
{
var userExist = _context.Movies.Where(l => l.Name == movie.Name ).FirstOrDefault();
if (userExist != null )
{
ModelState.AddModelError("error", "This Movie Name is already registered");
return View();
}
if (ModelState.IsValid)
{
_context.Movies.Add(movie);
try
{
_context.SaveChanges();
}
catch (DbEntityValidationException e)
{
Console.WriteLine(e);
}
}
return RedirectToAction("Index", "Movies");
}
并且不要忘记在视图中添加以下代码段
@Html.ValidationMessage("error", new { @class = "text-danger" })