如何在同一个asp.net mvc视图中处理过滤和未过滤的列表?

时间:2010-01-17 00:42:23

标签: asp.net-mvc viewmodel

我需要一种方法来显示用户是否订阅了服务并将其显示在视图中的表中。到目前为止,我能够显示用户是否订阅了某项服务,但是在他们没有订阅时却无法显示。

我创建了一个这样的viewmodel:

public class MyServicesController : Controller {

    public ActionResult Index()
    {
        WillEntities we = new WillEntities();

        var servicegroups = we.ServiceGroupSet.ToList();
        var services = we.ClientServiceSet.Include("AspnetUser").ToList();
        var aspnetusers = we.AspnetUserSet.Include("ClientService").ToList();

        return View(new MyServicesViewModel (servicegroups, services, aspnetusers));
    }
}

public ActionResult Index() { WillEntities we = new WillEntities(); var servicegroups = we.ServiceGroupSet.ToList(); var services = we.ClientServiceSet.Include("AspnetUser").ToList(); var aspnetusers = we.AspnetUserSet.Include("ClientService").ToList(); return View(new MyServicesViewModel (servicegroups, services, aspnetusers)); } }

然后将服务表呈现给视图,如下所示:

在拉取和过滤订阅该服务的任何用户,然后查看当前用户是否在该列表中时,该工作正常。

但考虑到通过使用<div id="Services"> <h2>My Services</h2> <table> <tr> <th class="th1"> Service Name </th> <th class="th3"> Select / Deselect </th> </tr> </table> <% foreach (var servgroup in Model.ServiceGroups ) { %> <ul> <%= servgroup.GroupName %> </ul> <table> <% foreach (var serv in servgroup.ClientService ) { %> <tr> <td class="td1"> <%= serv.Description%> </td> <td class="td3"> <%foreach (var user in serv.AspnetUser) { %> <%if (user.UserName.Equals(User.Identity.Name, >StringComparison.OrdinalIgnoreCase)) { %> Already subscribed <% } else {%> <%} %> <%} %> </td> </tr> <% } %> </table> <% } %> </div> 子句以这种方式进行过滤,我只从已选择特定服务的用户列表中提取

所以我目前无法获取 unchosen 服务并显示“尚未订阅”字符串以呈现到表中该服务的行。

我尝试创建一个布尔函数来拉出上面的“user”var并返回当前用户是否已订阅该服务的true或false:

<%foreach (var user in serv.AspnetUser)

public class MyServicesViewModel
{      

    public bool UsersServices(AspnetUser user)
    {
        if (user.UserId.ToString() == "35l1cob9-rest_of_user_guid-96975")
            return (true);
        else
            return (false);
    }
}

但无法找到将其纳入视图的方法,并通过尝试此方法让我觉得我过度复杂了。

有人能看到一种不那么复杂的方法吗?

非常感谢,

1 个答案:

答案 0 :(得分:1)

看起来你正在为你的ORM使用Entity Framework?我对Linq to SQL更熟悉,如果不知道所有幕后细节,很难给出一个精确的解决方案 - 但假设你在数据库中设置了相应的主/外键关系 - 你应该能够使用linq查询您需要的信息:

<table>
<tr>
<td class="td1">     
<%= serv.Description%>
</td>
<td class="td3">        
<% if (serv.AspnetUser.Where(u => u.UserName == User.Identity.Name).Count() > 0) 
{ %>
Already subscribed
<% }
else 
{ %>
Not subscribed
<%
} %>
</td>
</tr>        
</table>

希望有所帮助。