
こんにちは。
ASP.NET MVC でC#を使って社内Webシステムの構築を始めました。
以前はVB.NETでWindowsアプリケーションの開発をしていましたが、
今回、WebシステムということでASP.NET MVCとC#に挑戦してみました。
MVCの概念やC#ならではの記述などは素人です。
開発環境:VS2015、.NET 4.5.2、MVC 5.2.3.0
目的
ActiveDirectoryからワイルドカード検索をして、取得した複数のデータをViewで一覧表示する。
できたこと
ユーザーIDを直接指定して、1件だけのデータを表示。
AdController.cs
C#
1namespace Web1.Models 2{ 3 public class AdController : Controller 4 { 5 // GET: Ad 6 public ActionResult Index() 7 { 8 var directoryEntry = new DirectoryEntry(); 9 var directorySearcher = new DirectorySearcher(directoryEntry); 10 11 // ユーザーID 12 var samAccountName = "ABC123"; 13 14 // LDAP設定、検索 15 directoryEntry.Path = "LDAP://xxx"; 16 directorySearcher.Filter = String.Format("(&(objectClass=user)(samAccountName={0}))", samAccountName); 17 18 var result = directorySearcher.FindOne(); 19 var entry = result.GetDirectoryEntry(); 20 21 // メールアドレス 22 var mailAddress = (string)entry.Properties["mail"].Value; 23 24 ViewBag.Mail = mailAddress; 25 return View(); 26 } 27 } 28} 29
Ad/Index.cshtml
<tr> <td>メールアドレス</td> <td>@ViewBag.Mail</td> </tr>
やりたいこと
- 検索条件をワイルドカード指定(samAccountName = "ABC12*")
- directorySearcher.FindAll()で複数のデータをViewへ渡す(↓View画面のイメージ)
cn | name | department | |
---|---|---|---|
ABC121 | suzuki | suzuki@jp | 営業 |
ABC122 | sato | sato@jp | 総務 |
ABC123 | tanaka | tanaka@jp | 経理 |
質問
値が一つの場合は上記のようにFindOneで取得してViewBag変数で渡していましたが、複数だとどのようになるのでしょうか?
View側ではforeachで回すのだとは思うのですが、Controller側で取得した値を格納する型がわかりません。
また、このような事をしたい場合、Modelの定義は必要でしょうか?
不慣れなので具体的なコードがあると助かります。
よろしくお願いします。
追記
AdInfo.cs
C#
1namespace Web1.Models 2{ 3 public class AdInfo 4 { 5 public string Id { get; set; } 6 public string Name { get; set; } 7 public string Mail { get; set; } 8 public string Department { get; set; } 9 10 // 追加:引数を取るコンストラクタを実装 11 public AdInfo (string Id1, string Name1, string Mail1, string Department1) 12 { 13 Id = Id1; 14 Name = Name1; 15 Mail = Mail1; 16 Department = Department1; 17 } 18 } 19}
AdController.cs
C#
1using System.DirectoryServices; 2 3namespace Web1.Models 4{ 5 public class AdController : Controller 6 { 7 public ActionResult UserList() 8 { 9 var directoryEntry = new DirectoryEntry(); 10 var directorySearcher = new DirectorySearcher(directoryEntry); 11 12 // ユーザーID 13 var samAccountName = "ABC12*"; 14 15 // LDAP設定、検索 16 directoryEntry.Path = "LDAP://xxx"; 17 directorySearcher.Filter = String.Format("(&(objectClass=user)(samAccountName={0}))", samAccountName); 18 var result = directorySearcher.FindAll(); // FindOneからFindAllに変更 19 20 // ここから修正 21 List<AdInfo> model = new List<AdInfo>(); 22 23 foreach (var user in result 24 .Cast<SearchResult>() 25 .Select(x => x.GetDirectoryEntry())) 26 { 27 var id = (string)user.Properties["sAMAccountName"].Value; 28 var name = (string)user.Properties["name"].Value; 29 var mail = (string)user.Properties["mail"].Value; 30 var department = (string)user.Properties["department"].Value; 31 32 model.Add(new AdInfo(id, name, mail, department)); 33 } 34 35 return View(model); 36 } 37 } 38} 39




回答1件
あなたの回答
tips
プレビュー