如何从视图内部从多个表显示



我正在尝试在我的索引视图中显示来自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数据,您应该有一个专用的单向单程视图模型来敏感数据。

相关内容

  • 没有找到相关文章

最新更新