我尝试仅在与使用Entity Framework和MVC当前登录的用户的ID匹配时才显示项目列表。
我使用Entity Framework中的代码优先模型创建了一个数据库。我已经成功地在此数据库中添加了一个表,League,用于以前的迁移。
这些课程有一对多关系,因此一个用户可以拥有多个联赛。
以下是无效的控制器:
[Authorize]
public ActionResult Index()
{
var userId = User.Identity.GetUserId();
//Need to add functionality - if no user login, redirect to login page, if user is logged in, match aspnet user id to leagues displayed.
return View(db.Leagues.ToList().Where(u => u.ApplicationUser_Id == userId));
}
这是联盟模式:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace WebApplication1.Models
{
public class League
{
public League()
{
var Teams = new List<Team>();
var Matches = new List<Match>();
}
[Key]
[Display(Name = "League ID")]
public int LeagueId { get; set; }
[Display(Name = "League Name")]
public string Name { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Start Date")]
public DateTime StartDate { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
[ForeignKey("ApplicationUser")]
public string ApplicationUser_Id;
public virtual ICollection<Team> Teams { get; set; }
public virtual ICollection<Match> Matches { get; set; }
}
}
以下是传递给它的视图:
@model IEnumerable<WebApplication1.Models.League>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Leagues</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.StartDate)
</th>
<th>
Options
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.StartDate)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.LeagueId }) |
@Html.ActionLink("Details", "Details", new { id=item.LeagueId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.LeagueId })
</td>
</tr>
}
</table>
我只有一个用户,并在数据库中的ApplicationUser_Id列中添加了一个与当前用户ID匹配的条目,因此至少应显示一条记录。
但是,该列表为空:
总结一下,我试图将当前用户传递给数据请求,并将结果输出到数据库中包含当前登录用户的userId的所有联盟对象。
任何想法如何编码?