根据某些查询显示部分视图上的按钮

时间:2017-04-10 09:58:40

标签: c# asp.net-mvc linq

我在Facebook上显示与搜索群组相同的搜索结果 enter image description here

我在数据库中有一个名为 CommunityUser 的关系表,其属性为 CommunityID UserID

使用部分视图我想显示用户是否已加入该社区/群组,它将显示加入按钮否则如果用户已加入该社区,则会显示离开按钮。

我在我的控制器中编写了IsMember()函数,该函数包含两个参数: CommunityID UserID 。如果该用户ID存在社区ID,则返回true。

        public bool IsMember(string UserID, int CommunityID) {

        var Membership = db.Users.Include(x => x.CommunityUsers).Where(s => s.Id.Equals(UserID)).Count();

        if(Membership>0)
        return true;
        else
        return false;

    }

现在我真正需要的是,我想在我的视图类的IF条件中调用此函数。它不允许我在我的视图类上调用此函数。

@if (){

<button>@Html.ActionLink("Leave", "LeaveCommunity", new { id = ViewBag.ComID })</button>

}
else
{
<button>@Html.ActionLink("Join", "joinCommunity", new { id = ViewBag.ComID })</button>

}

1 个答案:

答案 0 :(得分:0)

在您的控制器中,您应该有一个返回此视图的方法。所以在这种方法中你可以调用这个函数

public ActionResult Index(string UserID, int CommunityID)
{
    var hasMembership = IsMember(serID, CommunityID);
    return View(hasMembership);
}

在View it self中,您只需获取刚刚从hasMembership传递的变量@model

@if (Model){
    <button>@Html.ActionLink("Leave", "LeaveCommunity", new { id = ViewBag.ComID })</button>
}
else
{
    <button>@Html.ActionLink("Join", "joinCommunity", new { id = ViewBag.ComID })</button>
}

注意:创建一些用于将数据传递到视图的DTO类可能是明智的,因为您可能需要在某个时刻将多个值传递给视图。此外,整个条件更具可读性

public SomeDTO {
    public bool IsMember {get;set}
    public List<Community> Communities {get;set;}
}

public ActionResult Index(string UserID, int CommunityID)
{
    var hasMembership = IsMember(serID, CommunityID);
    var listOfCommunities = _repo.GetComunities();

    var dto = new SomeDTO
    {
        IsMember = hasMembership,
        Communities = listOfCommunities
    }
    return View(dto);
}

@if (Model.IsMember){
    // do or do not something
}