using ViewBag - asp.net mvc

本文关键字:net mvc asp ViewBag using | 更新日期: 2023-09-27 18:11:56

在一个asp.net mvc项目中,我有这个在我的索引顶部。cshtml文件

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

它使用的方法是这个,它在home控制器上

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部分使用

然后在我的索引上。我有另一个脚本

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

我的问题是警报显示一个空消息,就像ViewBag.LoggedUser什么都没有。我用错ViewBag了吗?

using ViewBag - asp.net mvc

你在重新加载页面吗?如果不是,你的ViewBag有相同的内容,就像在页面渲染的时刻。Razor只在创建html页面时从ViewBag中渲染文本,如果你不重新加载页面,它将始终为空。你必须返回你的数据在一些对象(例如json) ajax请求,然后你可以使用它。