使用ViewBag - asp.net mvc

时间:2015-09-09 08:27:59

标签: javascript c# asp.net asp.net-mvc

在asp.net mvc项目中,我在index.cshtml文件之上有

$.ajax({
    url: '@Url.Action("getLoggedUser", "Home")',
    dataType: "html",
    "async": true,
    type: "GET",
    success: function (data) {

    },
});

它使用的方法就是这个,就在HomeController

public async Task getLoggedUser()
{
    try
    {
        BenchesService benchService = new BenchesService();
        UserTest LoggedUser = new UserTest();
        string name = Request.RequestContext.HttpContext.User.Identity.Name;
        name = name.Substring(name.LastIndexOf('\\') + 1);
        LoggedUser = await benchService.getCurrentUser(name);
        role = LoggedUser.role;
        ViewBag.LoggedUser = LoggedUser.role;
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }
}

这是使用getCurrentUser(name)对服务器进行GET;并返回带有用户信息的json,用于填充UserTest对象(我使用break检查并正确填充了LoggedUser)。

我想保存用户角色,在html / javascript部分中使用

然后再次在我的index.cshtml上,我有另外一个脚本

$(document).ready(function () {
    setTimeout(function () {
        console.log("TIMER!");
        userRole = '@ViewBag.LoggedUser';
        alert(userRole);
    }, 5000);

我的问题是警报显示空消息,例如ViewBag.LoggedUser没有任何内容。我使用ViewBag错了吗?

1 个答案:

答案 0 :(得分:3)

你在重装页面吗?如果没有,您的ViewBag具有与页面呈现时相同的内容。 Razor仅在创建html页面时从ViewBag渲染文本,如果您没有重新加载页面,它将始终为空。您必须将某些对象(例如json)中的数据返回给ajax请求,然后才能使用它。