我希望在表单提交并且操作成功后显示成功警报弹出或警报消息
在这个例子中,我想显示"成功添加" :
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());
}
我应该添加什么来做到这一点?
答案 0 :(得分:2)
可以肯定,但实施细节可能会因技术和应用结构而发生变化。
执行此操作的最常见方法之一(以及我目前正在使用并取得巨大成功的方法)之一就是接收需要接收并返回状态和/或状态的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 }); }
这样,您可以执行以下操作:
<script>
$.ajax({
url: "/",
method: "POST",
data: getMyData(),
success: function(json) {
if (json.Success) {
alert("Wow, everything was fine!");
} else {
alert(json.Message);
}
},
// This will be trigered whenever your ajax call fails (broken ISP link, etc).
error: function() {
alert("Something went wrong. Maybe the server is offline?");
}
});
</script>
诚实地对待您,可以提交表格(定期提交,我的意思)并在页面刷新时显示您想要的任何内容。
但是,这会强制您为视图模型加载额外的内容,例如额外的<script>
标记或一些额外的<div>
标记,并且每次都会检查它。
从可用性/设计的角度来看,这是不行的。尽可能避免页面刷新,因为它们会让用户感觉应用程序正在消失,或者他/她现在正在超越应用程序。
此外,从表现的角度来看,&#34;全程往返&#34;到服务器,包括发送表单数据和检索整个新页面(使用整个布局,脚本,剃刀渲染/解析和所有)是一个巨大的问题,只是为了显示&#34;成功/失败&#34;对于最终用户,请再次:尽可能避免使用它。
恕我直言,返回视图或部分视图仅向最终用户显示消息只是浪费 你的和你的最终用户&#39;链接。
答案 1 :(得分:2)
我曾经做过 Ajax表单,并在 OnSuccess 功能中显示消息:
@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)
<input type="submit" class="btn btn-primary" value="Save" id="btnsubmit" />
<input type="button" class="btn btn-primary btnCancelAvailability" id="0" value="Cancel">
}
<script>
function AddAvailabilitySuccess()
{
alert("Record updated successfully!");
}
</script>
答案 2 :(得分:1)
我可以使用ViewBag来做到这一点。
在您的控制器中,您必须添加:
if (ModelState.IsValid)
{
db.TAUX.Add(taux);
db.SaveChanges();
ViewBag.SuccessMsg = "successfully added";
return RedirectToAction("Index");
}
然后在索引视图中:
@{
var message = ViewBag.SuccessMsg;
}
<script type="text/javascript">
var message = '@message';
if(message){
alert(message);
}
</script>
最后你使用与MVC ViewBag混合的JavaScript:)