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



我有一个类

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) {

EntityFramework.SqlServer 中发生了类型为"System.InvalidCastException"的异常.dll但未在用户代码中处理

其他信息:指定的强制转换无效。

任何帮助

正如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 类,所有类和表都将更新。

相关内容

  • 没有找到相关文章