嗨,我是MVC的新手,我一直在尝试建立一个我一直关注的教程,试图在我的mvc应用程序中成功编辑某些内容时出现一个toastr消息。我想我已经完成了所有事情,但通知却没有弹出。
bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css",
"~/Content/toastr.css"));
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js",
"~/Scripts/toastr.js"));
我在我的脚本和我的CSS中添加了烤面包机,并且两个包都在布局视图中呈现。 在我的编辑操作中,如果成功,我将重定向到索引操作并添加消息。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Restaurant restaurant)
{
if (ModelState.IsValid)
{
db.Entry(restaurant).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index", new { message = "Added" });
}
return View(restaurant);
}
public ActionResult Index(string message )
{
if (!string.IsNullOrEmpty(message))
{
ViewBag.message = message;
}
return View(db.Restaurants.ToList());
}
然后在索引操作中我正在检查它是否为空,如果不是我将消息传递给viewbag。然后在索引视图中,我正在检查viewbag是否为空
@model IEnumerable<OdeToFoodNov1.Models.Restaurant>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.City)
</th>
<th>
@Html.DisplayNameFor(model => model.Country)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.City)
</td>
<td>
@Html.DisplayFor(modelItem => item.Country)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Reviews", "Index", "Reviews", new { id=item.Id }, null) |
@Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
</tr>
}
</table>
@if (ViewBag.message != null)
{
<script type="text/javascript">
$(document).ready(function () {
toastr.success('Added')
})
</script>
}
然而,当我回到索引视图时,我没有收到任何通知?感谢任何帮助,如果我遗漏了一些明显的东西,那就很抱歉。
答案 0 :(得分:1)
大多数MVC布局文件都包含一个名为脚本的可选部分(除非作者因某种原因将其删除)。
在布局文件中查找如下所示的行
@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
在这种情况下,任何想直接注入视图的Javascript都会在加载 jQuery之后加载到最终的HTML 中。
尝试做这样的事情,以便确保将注入的JS加载到可选脚本部分
@section scripts {
@if (ViewBag.message != null)
{
<script type="text/javascript">
$(document).ready(function () {
toastr.success('Added')
});
</script>
}
}