我正在尝试在Index视图中显示ApplicationUser表和Listings表中的数据。
这是我的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();
}
答案 0 :(得分:0)
使用@
直接渲染值:
<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>
如果您选择,这将有助于将来进行本地化,因为您的视图中未嵌入英语文本“用户名”。您将需要使用DisplayNameAttribute
的子类来接受资源名称而不是const字符串。
请注意,如果您的Controller具有接受POST
对象的IdentityUser
操作,则您的应用程序将容易受到模型覆盖攻击。出于这个原因,我不建议对ViewModel数据使用实体类型,您应该有一个专用的单向ViewModel用于敏感数据。