我正在尝试在我的索引视图中显示来自Applicationuser表和列表表的数据。
这是我的应用程序
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
[InverseProperty("Seller")]
public virtual ICollection<Listing> SellerListings { get; set; }
[InverseProperty("Buyer")]
public virtual ICollection<Listing> BuyerListings { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
public string Address { get; set; }
}
这是我的清单pocos
public class Listing
{
public int ListingId { get; set; }
[ForeignKey("Seller")]
public string SellerId { get; set; }
public virtual ApplicationUser Seller { get; set; }
[Required]
public string ItemCategory { get; set; }
[Required]
public string ItemName { get; set; }
[Required]
public decimal Cost { get; set; }
public DateTime DateOfPublish { get; set; }
[Required]
public bool SaleStatus { get; set; }
[ForeignKey("Buyer")]
public string BuyerId { get; set; }
public virtual ApplicationUser Buyer { get; set; }
}
在我的索引视图中
@model IEnumerable<Pocos.Listing>
我想显示卖家(用户)的用户名
@Html.DisplayNameFor(model => model.Seller.UserName)
,即使卖家人数正确,这也会显示空白
编辑:我的控制器和存储库可能有问题吗这是我的控制器:
public ActionResult Index()
{
List<Listing> listing = client.GetAllListings();
return View(listing);
这是我的存储库中的方法:
public List<Listing> GetAllListings()
{
return context.Listing.ToList();
}
只是使用 @
直接渲染值:
<p>
<span>User name:</span>
@this.Model.Seller.UserName
</p>
如果您需要执行进一步的查看级处理,则可以使用括号:
<p>
<span>User name:</span>
@( this.Model.Seller.UserName + " some concatenated string" )
</p>
如果您确实将[DisplayName]
属性添加到UserName
属性,则仍然可以使用DisplayNameFor
,例如:
applicationuser.cs:
[DisplayName("User name")]
public String UserName { get; set; }
view.cshtml:
<p>
<span>@Html.DisplayNameFor( m => m.Seller.UserName )</span>
@( this.Model.Seller.UserName + " some concatenated string" )
</p>
如果您选择的话,这将有助于将来的本地化,因为英语文本"用户名"未嵌入您的视图中。您将需要使用接受资源名称而不是const字符串的DisplayNameAttribute
子类。
请注意,如果您的控制器具有接受IdentityUser
对象的POST
操作,则您的应用程序将容易受到模型覆盖攻击的影响。由于这个原因,我不建议将实体类型用于ViewModel数据,您应该有一个专用的单向单程视图模型来敏感数据。