【问题标题】:How to show Alert Message like "successfully Inserted" after inserting to DB using ASp.net MVC3使用 ASp.net MVC3 插入数据库后如何显示“成功插入”等警报消息
【发布时间】:2011-12-25 04:31:07
【问题描述】:

如何编写显示警报消息的代码:“成功注册”,用户数据存储到数据库后,使用MVC

我正在使用 Asp.Net MVC3、C#、实体模型。

【问题讨论】:

    标签: c# asp.net asp.net-mvc-3 entity-framework-4


    【解决方案1】:

    小编辑

    尝试添加

    return new JavascriptResult() { Script = "alert('Successfully registered');" };
    

    代替

    return RedirectToAction("Index");
    

    【讨论】:

      【解决方案2】:

      尝试使用TempData

      public ActionResult Create(FormCollection collection) {
        ...
        TempData["notice"] = "Successfully registered";
        return RedirectToAction("Index");
        ...
      }
      

      然后,在您的索引视图或母版页等中,您可以这样做:

      <% if (TempData["notice"] != null) { %>
        <p><%= Html.Encode(TempData["notice"]) %></p>
      <% } %>
      

      或者,在 Razor 视图中:

      @if (TempData["notice"] != null) {
        <p>@TempData["notice"]</p>
      }
      

      引用自 MSDN(页面自 2014 年起已不存在,存档副本 here):

      动作方法可以在调用控制器的 RedirectToAction 方法调用下一个动作之前将数据存储在控制器的 TempDataDictionary 对象中。 TempData 属性值存储在会话状态中。在设置 TempDataDictionary 值之后调用的任何操作方法都可以从对象中获取值,然后处理或显示它们。 TempData 的值会一直存在,直到它被读取或会话超时。以这种方式持久化 TempData 可以实现重定向等场景,因为 TempData 中的值在单个请求之外可用。

      【讨论】:

        【解决方案3】:

        我个人会选择 AJAX。

        如果你不能切换到@Ajax... helpers,我建议你在你的模型中添加几个属性

        public bool TriggerOnLoad { get; set; }
        public string TriggerOnLoadMessage { get; set: }
        

        通过

        将您的视图更改为强类型模型
        @using MyModel
        

        在返回视图之前,如果成功创建,请执行以下操作

        MyModel model = new MyModel();
        model.TriggerOnLoad = true;
        model.TriggerOnLoadMessage = "Object successfully created!";
        return View ("Add", model);
        

        然后在你的视图中,添加这个

        @{
           if (model.TriggerOnLoad) {
           <text>
           <script type="text/javascript">
             alert('@Model.TriggerOnLoadMessage');
           </script>
           </text>
           }
        }
        

        当然在标签里面你可以选择做任何你想做的事情,事件声明一个jQuery就绪函数:

        $(document).ready(function () {
           alert('@Model.TriggerOnLoadMessage');
        });
        

        请记住在成功发出警报后重置模型属性。

        关于 MVC 的另一个好处是,您实际上可以为所有这些定义一个 EditorTemplate,然后通过以下方式在您的视图中使用它:

        @Html.EditorFor (m => m.TriggerOnLoadMessage)
        

        但如果你想构建这样的东西,也许最好定义你自己的 C# 类:

        class ClientMessageNotification {
            public bool TriggerOnLoad { get; set; }
            public string TriggerOnLoadMessage { get; set: }
        }
        

        并在模型中添加ClientMessageNotification 属性。然后为ClientMessageNotification 类编写EditorTemplate / DisplayTemplate 就完成了。漂亮、干净、可重复使用。

        【讨论】:

          【解决方案4】:

          执行此操作的“最佳”方法是在更新成功后在视图对象上设置一个属性。然后,您可以在视图中访问此属性并相应地通知用户。

          话虽如此,可以通过执行类似的操作从控制器代码中触发警报 -

          public ActionResult ActionName(PostBackData postbackdata)
          {
              //your DB code
              return new JavascriptResult { Script = "alert('Successfully registered');" };
          }
          

          您可以在这个问题中找到更多信息 - How to display "Message box" using MVC3 controller

          【讨论】:

          • 如何做到这一点...?iam 使用实体模型..这是我的代码 public ActionResult Create() { try { return View(); } 捕捉(异常前){ 返回 LogException(前); } }
          • [HttpPost] public ActionResult Create(FormCollection collection) { try { var objmsg = new Models.motds(); tblMessage 消息 = 新的 tblMessage(); msg.CreatedDate = System.DateTime.Now; msg.ModifiedDate = System.DateTime.Now;//默认id CreatedDate UpdateModel(msg); objmsg.AddMessage(msg); return RedirectToAction("索引"); } 捕捉(异常前){ } }
          • 尝试添加return new JavascriptResult { Script = "alert('Successfully registered');" }; 代替return RedirectToAction("Index");
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-08
          • 2019-09-27
          • 1970-01-01
          相关资源
          最近更新 更多