0

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

我创建了一个这样的视图模型:

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));
    }
}

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

<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>

它可以很好地提取和过滤订阅该服务的任何用户,然后查看当前用户是否在该列表中。

但是考虑到通过使用<%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);
    }
}

但无法想出一种方法将其放入视图中,并通过尝试这种方法来感受我过于复杂化的感觉。

谁能看到一个不那么复杂的方法来做到这一点?

非常感谢,

保罗

4

1 回答 1

1

看起来您正在为您的 ORM 使用实体框架?我对 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>

希望有帮助。

于 2010-01-18T05:03:22.643 回答