如何使用ASp.net MVC3插入数据库后显示“成功插入”等警报消息

时间:2011-11-09 10:06:53

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

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

我使用的是Asp.Net MVC3,C#,实体模型。

4 个答案:

答案 0 :(得分:26)

尝试使用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中的值可以在单个请求之外使用。

答案 1 :(得分:5)

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

说过可以通过做这样的事情来触发控制器代码的警报 -

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

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

答案 2 :(得分:3)

就个人而言,我会选择AJAX。

如果您无法切换到@Ajax...助手,我建议您在模型中添加几个属性

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

通过

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

在返回View之前,如果成功创建,请执行类似

的操作
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,你就完成了。很好,干净,可重复使用。

答案 3 :(得分:-1)

小编辑

尝试添加

var StartTime = time.Now()
func main(){...}

取代

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