【问题标题】:using ViewBag - asp.net mvc使用 ViewBag - asp.net mvc
【发布时间】:2015-09-09 08:27:59
【问题描述】:

在一个 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错了吗?

【问题讨论】:

  • returns a json with user info 不,它没有......你没有返回任何东西。
  • ViewBag 只能在服务器端读取。返回一个带有登录用户的 json 并在成功回调中访问它,你应该没问题。
  • 我解释错了,我修复了我的帖子
  • @ViewBag.LoggedUser 是剃须刀代码 - 它在发送到客户端之前在服务器上解析,因此如果在生成视图的 GET 方法中 @ViewBag.LoggedUsernull,它不会发出任何警报。您的 ajax 方法调用了一个不返回任何内容的方法。
  • 这是完全错误的。使用强类型模型,然后从控制器上的 GET 实际返回一些内容。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多