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

时间:2014-05-06 23:05:13

标签: javascript jquery asp.net-mvc asp.net-mvc-4

我希望在表单提交并且操作成功后显示成功警报弹出或警报消息 在这个例子中,我想显示"成功添加" :  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());
        }

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

3 个答案:

答案 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:)