2017-02-28 16 views
1

私の姓と名を尋ねる私のウェブページのフォームがあります。ユーザーがこのフォームを送信すると、私のコントローラー内の機能にデータを渡して、そのActive Directory内の対応するユーザーを見つけるために使用します。私はその後、私のページにその情報を表示すると、Javascript関数に一致する電子メールアドレスを返したいと思います。これを行うのは正しい方法ですか?はいの場合は、コントローラでフォーム入力を受け入れ、クライアント側のJavaScriptにデータを返す関数をどのように構築しますか?私は私のコントローラで、これまで持って何フォームからマイコンにデータを渡してから、クライアントサイドのJavaScriptに戻すには?

public SearchResult[] searchAD(String fname, String lname) 
    { 
     Func<System.DirectoryServices.ActiveDirectory.Domain> domain = System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain; 
     System.DirectoryServices.DirectoryEntry root = new DirectoryEntry("LDAP://"+domain); 
     DirectorySearcher searcher = new DirectorySearcher(); 
     searcher.SearchRoot = root; 
     searcher.SearchScope = SearchScope.Subtree; 
     searcher.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(givenName={0})(sn={1}))", fname, lname); 
     SearchResult[] results = new SearchResult['a']; 
     searcher.FindAll().CopyTo(results, 0); 
     return results; 
    } 

そして、私形式:

@using (Html.BeginForm("searchAD", "AD", FormMethod.Post)) 
    { 
     @Html.AntiForgeryToken() 

     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(m => m.firstName, "First Name", htmlAttributes: new { @class = "control-label" }) 
      <div> 
       @Html.EditorFor(model => model.firstName, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.firstName, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(m => m.lastName, "Last Name", htmlAttributes: new { @class = "control-label" }) 
      <div> 
       @Html.EditorFor(model => model.lastName, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.lastName, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div> 
       <input type="submit" value="Search" class="btn" /> 
      </div> 
     </div> 
    } 
+0

Ajax.BeginFormを使用してデータを返すことができます –

+0

これまでのところJavaScriptを投稿できますか? – DDelgro

+0

コントローラからjsに変数を渡す方法がわからないので、これまでのところjsはありません。 –

答えて

2

あなたはTempDataをに値を格納し、ビューで

public ActionResult searchAD(String fname, String lname) 
    { 
     Func<System.DirectoryServices.ActiveDirectory.Domain> domain = System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain; 
     System.DirectoryServices.DirectoryEntry root = new DirectoryEntry("LDAP://"+domain); 
     DirectorySearcher searcher = new DirectorySearcher(); 
     searcher.SearchRoot = root; 
     searcher.SearchScope = SearchScope.Subtree; 
     searcher.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(givenName={0})(sn={1}))", fname, lname); 
     SearchResult[] results = new SearchResult['a']; 
     searcher.FindAll().CopyTo(results, 0); 
     TempData["Result"]=results; 
     return View("ViewName"); 
    } 

にそれを得ることができます表示(Jquery)

上記
+0

また、Ajax.BeginFormを使用することもできます –

+0

ありがとう、これはうまくいくようです。 searcher.FindAll()を実行するたびにエラーが出ますが、一度修正すれば、これを試して、それが動作すれば答えとしてマークすることができます。 –

+0

'TempData'はコントローラメソッド間でデータを渡すためのものです(データをビューに渡すためではありません)。そしてOPはjavascriptを使ってそれをする方法を尋ねました。 –

2

TempDataをかviewbagは、あなたがその、常に@ Ajax.BeginForm

@using (Ajax.BeginForm("ActionName", "Controller", new AjaxOptions { OnComplete = "Sucess" })) 
の使用を作る、その後表示するバックコントロールから再びデータをポストする必要がthat.Ifためのものではありませんので、あなたの投稿の問題のための完全なソリューションではありません あなたは以下のような成功関数を記述する必要がjqueryので

:arg.dataで

function Sucess(arg) { 
    //arg.data 
} 

あなたがあなたの全ページの特定のないコンテンツをリフレッシュHtml.BeginForm @史上controller.Moreから渡しているか、そのオブジェクトを取得しますが、 with Ajax.beginフォームを使用すると、リオーダできますdはajax.begin形式のコンテンツのみです。

関連する問題