ASP中的Toast通知.NET MVC
Toast notifications in ASP.NET MVC
我在MVC应用程序中使用Toast通知插件来显示状态消息(成功编辑、更新、删除等),我想知道是否有一种简单的方法可以将一些逻辑放在Partial视图中,并将其放在我的Layout或每个需要的视图中。
部分
<script type="text/javascript">
$(document).ready(function () {
@if (ViewBag.Success == true) {
@:toastr.success("@ViewBag.Message");
} else if (ViewBag.Success == false) {
@:toastr.error("@ViewBag.Message");
}
});
</script>
查看
//Doesn't work
@Html.Partial("_ToastPartial")
//Tried this directly in the view instead of using the partial, didn't work
@if (ViewBag.Success == true) {
@:toastr.success("@ViewBag.Message");
} else if (ViewBag.Success == false) {
@:toastr.error("@ViewBag.Message");
}
控制器
public ActionResult SomethingAwesome(MyViewModel model)
{
ViewBag.Success = true;
ViewBag.Message = "Employee successfully added";
return RedirectToAction("Index");
}
这行不通。有可能把这样的东西包装在一个分部中吗?或者MVC去掉了<script>
标签吗?我可以在视图上的脚本块中渲染部分吗?
我甚至试图将脚本标记中的代码直接移动到View,然后在Controller上设置值,结果似乎什么都没发生。
有什么帮助吗?视图再次渲染时ViewBag是否已清除?我应该使用TempData吗?我可以将Success
和Message
属性移动到我的ViewModel中,然后像这样将其传递到我的View中吗?
public ActionResult Index(MyViewModel model)
{
//Do something with model.Success
}
我的解决方案
我使用了几个答案来得出我网站这一部分的最终结论,很可能会在其他部分使用公认答案的方法。
我去并添加了以下到我的ViewModel
public bool Success { get; set; }
public string Message { get; set; }
在属性全部设置后,我让Action返回带有ViewModel的Index视图
//fetch the updated data and shove into ViewModel here
viewModel.Success = true;
viewModel.Message = "Employee successfully checked in";
return View("Index", viewModel);
然后在我的View 中使用Razor语法
@if (Model.Success) {
@:toastr.success("@Model.Message");
} else if (!Model.Success && !String.IsNullOrWhiteSpace(Model.Message)) {
@:toastr.error("@Model.Message");
}
还有一个额外的好处(尽管实现看起来很草率),在我的文档中呈现Partial。就绪块
@Html.Partial("_ToastPartial", Model)
并将Toast通知代码移动到部分
@if (Model.Success) {
@:toastr.success("@Model.Message");
} else if (!Model.Success && !String.IsNullOrWhiteSpace(Model.Message)) {
@:toastr.error("@Model.Message");
}
最有可能的是,我会设置一个具有Message
和Success
属性的接口,并使任何将使用该部分的ViewModels实现该接口
您的控制器正在执行RedirectToAction
。ViewBag和ViewData只能在当前请求中幸存。TempData是当你使用重定向时要使用的东西(而且只有在那时):
http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications明确指出:
[…]TempData对象在一个基本场景中运行良好:
- 在当前和下一个HTTP请求之间传递数据
使用这个nuget包,我很容易在mvc中使用toast。我有点惊讶它没有被更多地使用。。。https://www.nuget.org/packages/RedWillow.MvcToastrFlash
如果您正在寻找ASP上的实现,请尝试此库NtoastNotify。NET核心。(免责声明:作者在这里)
- 将Javascript数组发送到控制器ASP.NET MVC
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效
- C#asp.net mvc Set CheckBoxFor已检查的具有Model Value的属性
- ASP.NET MVC 3-在ajax调用后,重定向到新页面或生成页面刷新
- ASP.NET MVC,在文本框旁边显示文本
- Angular promise return"未定义的“;值.NET MVC
- asp.net MVC,重定向到视图,视图打开新窗口到外部url,它'It’’’’我们被当成一种风景
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 使用jquery变量作为.net MVC中ActionLink的参数
- 带有接口的ASP.NET MVC RegisterModel
- OnClick对ActionLink-ASP.NET MVC中的Prevent无效
- 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么
- 如何在asp.net mvc 3上进行触摸屏操作
- asp.net mvc中的javascript验证不适用于登录表单
- ASP.NET MVC-如何捕获多个复杂的ListBox值并将其保存到数据库中
- ASP.NET MVC路由-动态加载.js脚本
- 如何在asp.net MVC中从View获取值到JavaScript
- 在带有 bootbox 的自定义对话框中添加选项以选择表单控件.js在 ASP.NET MVC 中
- 谷歌将部分页面加载后自动完成不起作用 ASP.Net MVC
- ASP.Net MVC 脚本无法使用控制器的默认操作 URL.使用控制器/操作 URL 也是如此