Eseguire un metodo MVC tramite jQuery

Ho avuto la necessità di eseguire una ricerca su Active Directory da un’interfaccia ASP.NET MVC.

Inserendo il testo da ricercare su una textbox presente nella mia View (texttosearch) effettuo una chiamata ad un metodo del controller associato.
Per far ciò ho usato jQuery inserendo semplicemente questo script nella mia pagina:

var texttosearch = $("#textToSearch").val();

$.getJSON("/AccountManager/SearchForADUsers",
{ textToSearchInActiveDirectory: texttosearch },
    function (data) {
        var markup = '';
        $.each(data, function (key, val)    {
            markup += '<li id=\'' + val.sAMAccountName + '\' >' + val.GivenName + ' ' + val.SN + ' [' + val.sAMAccountName + ']' + '</option>';
        });

Il metodo SearchForADUsers è così dichiarato:

        [OutputCache(Location = OutputCacheLocation.None)]
        public JsonResult SearchForADUsers(string textToSearchInActiveDirectory)
        {
            List<UserInfo> usersInfo = new List<UserInfo>();

            Logger.Write("SearchForADUsers request for: " + textToSearchInActiveDirectory);

            SearchUsers searchFactory = SearchUsers.GetEntryPoint(Settings.Default.LDAPToSearch);
            SearchFilter filter = new SearchFilter(SearchField.Surname, SearchType.StartsWith);
            filter.StringToSearch = textToSearchInActiveDirectory;

            Logger.Write("Active Directory is ENABLED --> Searching AD for users");

            usersInfo = searchFactory.PerformSearchSubtree(filter);

            Logger.Write("The applications found: " + usersInfo.Count + " users");

            return Json(usersInfo.OrderBy(u => u.SN), JsonRequestBehavior.AllowGet);
        }

l’attributo in resta al metodo serve per evitare che IIS mi metta in cache i risultati passati.

La classe JsonReult si occupa di stringare il risultato in formato json da poter riutilizzare lato client.

Il risultato che ottengo dal metodo è una lista di un oggetto custom così definito:

public class UserInfo
{
        public string sAMAccountName { get; set; }
        public string Password { get; set; }
        public string DisplayName { get; set; }
        public string GivenName { get; set; }
        public string SN { get; set; }
        public string Company { get; set; }
        public string Email { get; set; }
        public string Mobile { get; set; }
        public string Path { get; set; }
        public string UserPrincipalName { get; set; }
}

Spero vi torni utile

ciao

Rebitting Tags: | | |

posted @ mercoledì 16 marzo 2011 15:00

Print

Comments on this entry:

# re: Eseguire un metodo MVC tramite jQuery

Left by Tix at 16/03/2011 18:52
Gravatar
Ciao,
personalmente avrei scelto una strada diversa,
premesso che la richiesta sia quella di effettuare una ricerca ajax style farei alcune modifiche alla tua implementazione :
1) Controller: la action restituisce un result di tipo PartialViewResult passando il model ottenuto alla PartialView che creiamo di seguito
2) View(_partialView): Creazione di una PartialView nella quale in modo tipizzato consumo il Model(risultato della ricerca)
3) View(principale): richiamo della PartialView attraverso il metodo load di jQuery, $('#result').load('/AccountManager/SearchForADUsers');
4) Al fine di ottenere una ricerca di tipo ‘Instant’ effettuerei un bind sull’evento keypress del campo input, il risultato sarebbe qualcosa di simile :
$('#input').keypress(function() {
$('#result').empty();
$('#result').load('/AccountManager/SearchForADUsers');
});

Ci sarebbero diverse altre soluzioni possibili con qualche riga in piu’ di codice.
Comments have been closed on this topic.