表单提交后ASP.net MVC成功提醒

我希望在表单提交和操作成功后显示成功警报弹出或警报消息
在这个例子中,我想显示“成功添加”: Create Action

 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(TAUX taux) { if (ModelState.IsValid) { db.TAUX.Add(taux); db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.CAT_ID = new SelectList(db.CATEGORIE, "CAT_ID", "LIBELLE", taux.CAT_ID); ViewBag.C_GARANT = new SelectList(db.GARANTIE, "C_GARANT", "LIB_ABREGE", taux.C_GARANT); return PartialView("_Create", taux); } 

Index Action

 public ActionResult Index() { var taux = db.TAUX.Include(t => t.CATEGORIE).Include(t => t.GARANTIE); return View(taux.ToList()); } 

我应该添加什么来做到这一点?

当然,这是可能的,但实现细节可能会因技术和应用程序结构而改变。

执行此操作的最常见方法之一(以及我目前正在使用并取得巨大成功的方法)之一是接收您需要接收并返回带有状态和/或错误消息的JSON对象,这将是由您的视图中的某些脚本使用。

例如:

 [Route(""), HttpPost] public JsonResult DoSomethingOnTheServer(DoSomethingViewModel vm) { try { if (DoSomething(vm)) return Success(); else return Error("The server wasn't able to do something right now."); } catch (Exception err) { return Error(err.Message); } } public JsonResult Success() { return Json(new { Success = true, Message = "" }); } public JsonResult Error(string message) { return Json(new { Success = false, Message = message }); } 

这样,您可以执行以下操作:

  

老实说,有可能提交表格(定期提交,我的意思)和页面刷新,显示你想要的任何东西。

但是,这会强制您使用视图模型加载额外的内容,例如额外的标记或一些额外的

标记,并且每次都要检查它。

从可用性/设计的角度来看,这是不可取的。 尽可能避免页面刷新,因为它们会让用户感觉应用程序正在消失,或者他/她现在正在超越应用程序。

此外,从性能的角度来看,服务器的“完整往返”包括发送表单数据和检索整个新页面(包括整个布局,脚本,剃刀渲染/解析等),为了给最终用户显示“成功/失败”的大问题,再次:尽可能避免它。

恕我直言,返回视图或部分视图只是为了向最终用户显示消息只是浪费你的你的最终用户的链接。

我以前制作Ajax Form并在OnSuccessfunction中显示消息:

 @using (Ajax.BeginForm("Edit1", "Availability", new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.InsertBefore, UpdateTargetId = "formAddAvailabilityContainer", OnSuccess = "AddAvailabilitySuccess" }, new { @class = "AjaxForm", @id = "formAvailability_" + Model.Id })) { @Html.ValidationSummary(true) @Html.HiddenFor(model => model.Id) @Html.HiddenFor(model => model.UserId) @Html.EditorFor(model => model.StartTime) @Html.MyValidationMessageFor(model => model.StartTime) @Html.EditorFor(model => model.EndTime) @Html.MyValidationMessageFor(model => model.EndTime) @Html.EditorFor(model => model.RecurrenceFreq) @Html.MyValidationMessageFor(model => model.RecurrenceFreq) @Html.TextBoxFor(model => model.EndsAfterValue, new {id="txtBoxEndsAfterValue" }) @Html.MyValidationMessageFor(model => model.EndsAfterValue) @Html.EditorFor(model => model.EndsByDate)   }  

我有办法使用ViewBag做到这一点。

在您的控制器中,您必须添加:

 if (ModelState.IsValid) { db.TAUX.Add(taux); db.SaveChanges(); ViewBag.SuccessMsg = "successfully added"; return RedirectToAction("Index"); } 

然后在索引视图中:

 @{ var message = ViewBag.SuccessMsg; }  

最后你使用混合了MVC ViewBag的JavaScript 🙂