Как мне обработать отфильтрованный и нефильтрованный список в том же представлении asp.net mvc? - PullRequest
0 голосов
/ 17 января 2010

Мне нужен способ показать, подписан ли пользователь на услугу или нет, и отобразить его в виде таблицы. Пока я могу показать, подписан ли пользователь на услугу, но не может показать, когда он не подписан.

Я создал видовую модель, подобную этой:

public class MyServicesController : Controller {</p> <pre><code> 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), я извлекаю only из списка пользователей, которые выбрали конкретную данную услугу.

Таким образом, в настоящее время у меня нет возможности захватить службы unchosen и отобразить строку «Пока не подписано» для отображения в строке этого сервиса в таблице.

Я попытался создать логическую функцию, чтобы вытащить указанную выше переменную "user" и вернуть true или false того, подписан ли текущий пользователь на эту службу:

</p> <pre><code>public class MyServicesViewModel { public bool UsersServices(AspnetUser user) { if (user.UserId.ToString() == "35l1cob9-rest_of_user_guid-96975") return (true); else return (false); } }

но не смог придумать, как это сделать, и почувствовал, что я слишком усложняю, попробовав этот метод.

Кто-нибудь может увидеть менее сложный способ сделать это?

Большое спасибо,

Пол

1 Ответ

1 голос
/ 18 января 2010

Похоже, вы используете Entity Framework для своего 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>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...