【发布时间】:2019-04-26 03:19:39
【问题描述】:
我想在数据保存后向用户显示一条成功消息。我在控制器中创建了一个 Viewbag 并在视图中调用它。单击保存按钮后,数据已保存,但未出现成功消息。它立即重定向到索引页面。下面是我的代码,谢谢
控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ParamNoRekeningSumberDana model)
{
ViewBag.SuccessCreate = "";
if (ModelState.IsValid)
{
ParamNoRekeningSumberDana newrecord = new ParamNoRekeningSumberDana();
newrecord.ID = Guid.NewGuid();
newrecord.AccountNo = model.AccountNo;
newrecord.CreatedBy = Session["UserName"].ToString();
db.ParamNoRekeningSumberDanas.Add(newrecord);
db.SaveChanges();
ViewBag.SuccessCreate = "Saved successfully";
return RedirectToAction("Index");
}
else{
return View(model);
}
}
查看
@{
if (ViewBag.SuccessCreate != null){
<script type="text/javascript">
var temp = @Html.Raw(Json.Encode(ViewBag.SuccessCreate));
alert(temp);
</script>
}
}
@using (Html.BeginForm())
{
<div class="form-group">
@Html.LabelFor(model => model.AccountNo, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.AccountNo, (List<SelectListItem>)ViewBag.AccountNos, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.AccountNo, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
}
【问题讨论】:
-
您想在哪个页面上显示消息?如果在带有表单的视图上,那么您不应该在
Create内使用RedirectToAction。理想情况下,此操作的调用应该是异步的(使用 ALAX),它应该返回您的消息或其他一些成功的指示符。然后在 ajax 成功回调中,您可以显示消息并将用户重定向到索引页面。否则,如果您想在索引页面上显示此消息,那么您应该使用临时数据并在索引页面上检查它,而不是在带有表单的视图上。 -
其实消息显示在哪里都没有关系,可以在create或者index中显示。但在我的代码中,它显示在创建页面上,如果出现消息,用户将单击消息上的确定,然后重定向到索引。还是有更简单的方法? @RomanKoliada
-
如果您只想在单击消息后重定向用户,那么恐怕没有其他方法可以使用ajax请求并在客户端重定向。
-
如果如您之前所说,使用临时数据在索引页面上发出成功消息怎么办?如果可能的话,你能告诉我如何使用它吗? @RomanKoliada
标签: c# asp.net-mvc razor