【发布时间】: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.LoggedUser是null,它不会发出任何警报。您的 ajax 方法调用了一个不返回任何内容的方法。 -
这是完全错误的。使用强类型模型,然后从控制器上的 GET 实际返回一些内容。
标签: javascript c# asp.net asp.net-mvc