如何从视图中

时间:2017-09-05 23:20:30

标签: c# asp.net asp.net-mvc asp.net-identity

我正在尝试在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();
    }

1 个答案:

答案 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用于敏感数据。