如何在控制器POST方法

时间:2015-09-09 16:30:26

标签: c# asp.net-mvc controller notifications

我正在尝试根据客户端notification message是否有error来添加input

问题在于,如果客户端没有输入正确的详细信息,并且尝试将其放在我的{的不同部分,我不知道将message code放在哪里{1}}我认为这是有意义的。

我知道怎么做没有一个code method,因为你只是使用了ViewModel if语句。这就是我在某些Model.IsValid上所做的,我没有使用controllers。我还尝试在ViewModel的代码中添加Model.IsValid if语句,但这也不起作用。

我能够将ViewModel放在正确的位置,但无论我将success message置于何处,它似乎仍与error message同时出现,这是不正确的。实际上,如果客户端没有success message或输入错误,阻止成功创建,它就会弹出。

这是我使用select

POST方法的代码
ViewModel

请注意 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(DeliveryVM model) { Delivery delivery = new Delivery() { DriverID = model.DriverID, Created_Date = DateTime.Now, Created_Time = DateTime.Now }; db.Deliverys.Add(delivery); db.SaveChanges(); // save the selected orders based on the ID of the Delivery object IEnumerable<int> selectedOrders = model.Orders.Where(o => o.IsSelected).Select(o => o.ID); foreach (int ID in selectedOrders) { Order order = db.Orders.Where(o => o.OrderID == ID).FirstOrDefault(); order.DeliveryID = delivery.DeliveryID; db.Entry(order).State = EntityState.Modified; } var driver = from ord in db.Drivers where ord.DriverID == delivery.DriverID select ord; foreach (Driver ord in driver) { ord.DriverStatus = "Unavailable"; } if (ModelState.IsValid) { db.SaveChanges(); Success(string.Format("Delivery No: {0} was successfully created!", delivery.DeliveryID), true); return RedirectToAction("Details", new { id = delivery.DeliveryID }); } // Error Danger("Oh Snap! Looks like something went wrong!", true); return View(model); } 已正确放置。

使用Success(string.Format("Delivery No: {0} was successfully created!", delivery.DeliveryID), true);无论我放置它的位置,它都会在Danger("Oh Snap! Looks like something went wrong!", true); Delivery之后弹出,而不是在created时弹出。我解释了为什么我认为我应该把它放在我所做的地方,在代码片段中,但我错了。

任何人都可以帮我解决error的位置,以便在有error message时弹出,因为用户没有选择任何值或输入错误的详细信息?

查看:

error

1 个答案:

答案 0 :(得分:1)

首先,检查验证的正确方法是:

Danger

这样,除非验证成功,否则您甚至都不会尝试保存。此外,一眼就能看出错误消息与成功消息的发送位置非常容易。

其次,即使你拥有的东西可以工作,你也必须考虑如何运行代码。首先,调用Danger,并且总是调用,无论保存最终是否成功。然后你试图保存。如果保存成功,您已调用Danger,因此您会收到错误消息成功消息。在保存失败的情况下,则会生成500错误,这意味着处理将从错误处理程序中移除,以显示通用服务器错误消息,500.html的内容或您处理500s的任何自定义操作。无论如何,你打电话给try { db.SaveChanges(); } except (DbEntityValidationException) { Danger("Oh Snap! Looks like something went wrong!", true); return View(model); } 这个事实已经很久了。

可以捕获异常,然后做出相应的回应:

ModelState.IsValid

但是,然后,你不必要地击中了DB。使用{{1}}可用的内置模型验证要好得多。

相关问题