2017-02-28 72 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)

$(function(){ 
    if ('@TempData["Result"]' != '') 
     { 
     // call your function here and pass TempData Value 
     } 
}); 
+0

您也可以使用Ajax.BeginForm –

+0

謝謝,這看起來像它會工作。每次運行searcher.FindAll()時,我都會收到一個錯誤,但是一旦我解決了這個問題,我可以試試這個,並將它標記爲答案(如果它有效)。 –

+0

'TempData'用於在控制器方法之間傳遞數據(不用於將數據傳遞給視圖)。而OP已經問過如何使用javascript來做到這一點。 –

2

上面是不是你貼出的問題完美的解決方案,因爲TempData的或viewbag並不意味着that.If您需要發佈的數據從控制再返回查看,然後它總是使用@ Ajax.BeginForm

@using (Ajax.BeginForm("ActionName", "Controller", new AjaxOptions { OnComplete = "Sucess" })) 

jQuery中你必須編寫成功函數象下面這樣:

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

在arg.data你會得到你的對象從controller.More傳遞什麼都@ Html.BeginForm刷新整個網頁沒有具體內容,但使用Ajax.begin表單您可以管理重新發布d只有那些以ajax.begin形式出現的內容。

相關問題