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

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

我使用的是Asp.Net MVC3,C#,Entity Model。

尝试使用TempData

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

然后,在索引视图或母版页等中,您可以执行以下操作:

 <% if (TempData["notice"] != null) { %> 

<%= Html.Encode(TempData["notice"]) %>

<% } %>

或者,在Razor视图中:

 @if (TempData["notice"] != null) { 

@TempData["notice"]

}

从MSDN引用(截至2014年页面已不再存在, 此处存档副本):

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

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

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

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

您可以在此问题中找到更多信息 – 如何使用MVC3控制器显示“消息框”

就个人而言,我会选择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) {    } } 

当然,在标签内你可以选择做任何你想做的事情,事件声明一个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,您就完成了。 很好,干净,可重复使用。

小编辑

尝试添加

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

代替

 return RedirectToAction("Index");