Asp.net mvc 我的ViewBag不工作的原因是什么?

Asp.net mvc 我的ViewBag不工作的原因是什么?,asp.net-mvc,Asp.net Mvc,我在控制器中设置了以下ActionResult,如果成功,您可以看到我在ViewBag中设置了一条消息。然后在视图上如果消息不是空的,它应该输出该消息。但是,我无法显示该消息,也看不出问题出在哪里 [HttpPost] public ActionResult Create(FormCollection collection) { try { context.Roles.Add(new

我在
控制器中设置了以下
ActionResult
,如果成功,您可以看到我在
ViewBag
中设置了一条消息。然后在
视图上
如果消息不是空的,它应该输出该消息。但是,我无法显示该消息,也看不出问题出在哪里

[HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                context.Roles.Add(new Microsoft.AspNet.Identity.EntityFramework.IdentityRole()
                {
                    Name = collection["RoleName"]
                });
                context.SaveChanges();

                ViewBag.ResultMessage = "Role created successfully.";
                return RedirectToAction("Index");
            }
            catch (Exception)
            {
                return View();
            }            
        }
这是我的Index.cshtml

@model IEnumerable<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>
@{
    ViewBag.Title = "Index";
}

<h2>Roles Listing </h2>

@ViewBag.ResultMessage

@Html.ActionLink("Create New Role", "Create") | @Html.ActionLink("Manage User Role", "ManageUserRoles")

<div>
    <table class="table table-bordered table-condensed table-striped table-hover ">
        <thead>
            <tr>
                <th>Role</th>
                <th>Action</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var role in Model)
            {
                <tr>
                    <td><strong>@role.Name</strong></td>
                    <td>
                        <span onclick="return confirm('Are you sure you want to delete @role.Name?')"><a href="/Roles/Delete?RoleName=@role.Name" class="delLink" style="color:red;">Delete</a></span> |
                        @Html.ActionLink("Edit", "Edit", new { roleName = @role.Name })
                    </td>
                </tr>
            }
        </tbody>
    </table>
</div>
@model IEnumerable
@{
ViewBag.Title=“Index”;
}
角色列表
@ViewBag.ResultMessage
@Html.ActionLink(“创建新角色”、“创建”)|@Html.ActionLink(“管理用户角色”、“管理用户角色”)
角色
行动
@foreach(模型中的var角色)
{
@role.Name
|
@ActionLink(“编辑”,“编辑”,新的{roleName=@role.Name})
}

ViewBag
有助于在从
控制器
移动到
视图
时维护数据。生命周期短意味着发生重定向时值变为空。这是因为他们的目标是提供
控制器
视图
之间的通信方式。它是服务器调用中的一种通信机制

由于您正在使用
重定向到操作
视图包
在到达
视图
时变为

您可以为此使用
TempData

TempData["ResultMessage"] = "Role created successfully.";
它使用
会话
作为存储,但在第二次响应后它将不存在。
TempData
有助于在从一个
controller
移动到另一个
controller
或从一个动作移动到另一个动作时维护数据。换句话说,重定向时,
Tempdata
有助于在这些重定向之间维护数据。它在内部使用会话变量
TempData
use在当前和后续请求期间仅表示在您确定下一个请求将重定向到下一个视图时使用它

有关这方面的更多了解,请参阅

ViewBag属性使您能够动态共享来自 将控制器添加到视图中。()

它的生命周期仅在当前请求期间,如果发生重定向,则它的值将变为null。 由于您使用的是重定向到其他控制器的
RedirectToAction
,因此
ViewBag
的值将丢失

考虑改用
TempData

TempData["ResultMessage"] = "Role created successfully.";

(有关用法,请参阅)

viewbag/viewdata范围仅可供控制器查看。如果您使用tempdata,它将提供一个请求,您可以扩展多个请求

谢谢,因为您可以告诉我,我仍在学习MVC,而且我正在用它制作一个真实世界的应用程序,这就是为什么我会弹出所有这些小问题。哇,真的谢谢您。这对我帮助太大了,也谢谢你。我花了3个小时试图弄明白为什么我愚蠢的ViewBag是空的。