我试图从userList viewbag.i获取值无法找出解决方案 . 错误是:
System.Core.dll中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的异常,但未在用户代码中处理附加信息:“object”不包含“name”的定义
虽然在ViewBag.userList中包含我可以在调试时看到的数据(2个对象)
@foreach (var aUser in ViewBag.userList)
{
<tr>
<td>@aUser.name</td>
<td>@aUser.username</td>
.....
<td>@Html.ActionLink("Edit", "UserEdit","Users")</td>
<td>@Html.ActionLink("Delete", "UserDelete", "Users")</td>
</tr>
}
我有一个超类和一个子类
超
public partial class user
{
public int id { get; set; }
public string name { get; set; }
public string username { get; set; }
...
public string user_role { get; set; }
}
childclass
public class UserSub: user
{
public string CreatedUserName { get; set; }
public string ModifiedUserName { get; set; }
}
在我的控制器中,我使用linq从数据库中获取值并将其存储到Viewbag.userList . 我的控制器功能是
public ActionResult UserList()
{
IEnumerable<user> users = null;
users = dbEntities.users.ToList();
if (users != null)
{
var userLists = (from a in users join b in users on a.created_user_id equals b.id select new { a.name, a.username, a.password, a.user_role, a.is_enable, a.is_approved, CreatedUserName = b.name, a.create_time, a.is_android, a.device_id }).ToList();
ViewBag.userList = userLists;
}
return View();
}
试过 List<UserSub> users=ViewBag.userList
....也得到了错误
1 回答
使用 ViewModel 在视图和控制器之间共享数据 .
例如,首先创建 ViewModel :
您可以在视图模型中放置所需的所有数据...然后,我建议您在模型中创建一个包含所需的所有查询的类(您必须调查如何操作),但是您可以获得来自控制器的查询(如果需要) .
好吧,编辑你的 controller 函数:
最后,修改 view 并调用 ViewModel
userViewModel
这是想法,改善我的答案 . ;)