.net MVC身份...获取特定用户输入的数据

时间:2014-11-18 12:45:52

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

我有一个班级

public class Employee
{
  public int Id { get; set; }
  public string Name { get; set; }
  public string Designation { get; set; }
  public Guid UserId { get; set; }   
}

我创建了不同的用户,我可以通过不同的用户输入数据。在我的控制器上,我想显示仅由记录用户输入的数据..。这是我的控制器代码

// GET: Employees
[Authorize]        
public ActionResult Index()
{
  MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true);
  var empList = from emp in db.Employees
                where emp.UserId == (Guid)currentUser.ProviderUserKey
                select emp;
  return View(empList);         
}

我的@foreach行视图中出现错误

这是我的观点

@model IEnumerable<LoginTestApp.Models.Employee>   
@{
    ViewBag.Title = "Index";
}
<h2>Index</h2> 
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Designation)
        </th>

        <th></th>
    </tr>

@foreach (var item in Model) {
  

类型&#39; System.InvalidCastException&#39;的例外情况发生在EntityFramework.SqlServer.dll中但未在用户代码中处理

     

其他信息:指定的演员表无效。

任何帮助

1 个答案:

答案 0 :(得分:0)

正如Muecke在评论中建议的那样,您目前正在返回IQueriable而不是IEnumerable。所以添加ToList()应该可以解决这个问题。您可能还想添加

return View(empList.ToList()) 

此外,您可能希望通过在查询中添加订单来返回已排序的结果,或者在此处添加:

return View(empList.SortBy(o=>o.Name).ToList()) 

另请注意,让UserId成为您最近编辑记录的人的指标,尤其是在包含人物的表格上,这令您感到困惑(正如您在评论中看到的那样)!

我发现真正有用的是将我的模型基于一个继承的类,其中包含我想在数据库级别上跟踪的所有内容。例如,您创建了一个名为DataObject的类,如下所示:

public int Id { get; set; }
public Guid CreatedByGuid { get; set; }
public Guid EditedByGuid { get; set; }
public DateTime CreateDateTime { get; set; }
public DateTime EditDateTime { get; set; }

然后,您可以将这些继承到您的Employee类:

public class Employee: DataObject
{

等。特别是与Code First设计相结合,从您的对象生成数据库,这非常强大和干净。如果要跟踪其他任何内容,只需添加或更改DataObject类,所有类和表格都将更新。