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)句を使用してこのようにフィルタリングすることで、特定の特定のサービスを選択したユーザーのリストからのみ取得しています。

したがって、現時点では、選択されていないサービスを取得し「まだ購読していません」という文字列を表示して、テーブル内のそのサービスの行にレンダリングする方法がありません。

上記の「ユーザー」変数を取り出して、現在のユーザーがそのサービスに加入しているかどうかの true または false を返すブール関数を作成しようとしました。

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

それが役立つことを願っています。

于 2010-01-18T05:03:22.643 に答える