jqueryui autocomplete render HTML returned by server

拟墨画扇 提交于 2019-12-25 07:47:14

问题


I have a simple page with an input text-box. The text box is bound to jquery ui autocomplete that makes an AJAX call to the server. My server side code is an ASP.NET MVC site. The only difference I have as compared to most examples found over the Internet is that my Server side code returns a PartialView (html code) as results instead of JSON. I see the AJAX call happening and I see the HTML response in the AJAX success event as well.

My question is how do I bind this HTML data to show in the AutoComplete?

The code I have so far is:

$("#quick_search_text").autocomplete({ minLength: 3, html: true, autoFocus: true, source: function (request, response) {

            $.ajax({
                type: "POST",
                url: "serversideurl",
                data: "{ 'SearchTerm': '" + request.term + "', 'SearchCategory': '" + $("#quick_search_category").val() + "' }",
                contentType: "application/json; charset=utf-8",
                dataType: "html",
                error: function (jqXHR, textStatus, errorThrown) {
                    console.log(jqXHR);
                },
                success: function (data) {
                  //THIS IS WHERE MY HTML IS RETURNED FROM SERVER SIDE
                  //HOW DO I BIND THIS TO JQUERY UI AUTOCOMPLETE   
                }
            });
        },
        select: function (event, ui) {
        },
        response: function (event, ui) {
            console.log(ui);
            console.log(event);
        }
    });

回答1:


This works: 1) Create an action in your controller and set the RouteConfig to start this action

public class HomeController : Controller
{
    public ActionResult Index20()
    {
        MyViewModel m = new MyViewModel();
        return View(m);
    }

Create a view without any type of master page

Add this view model:

public class MyViewModel
{
    public string SourceCaseNumber { get; set; }
}

Go to Manage Nuget Packages or PM Console and add to MVC 5 project - Typeahead.js for MVC 5 Models by Tim Wilson

Change the namespace for the added HtmlHelpers.cs to System.Web.Mvc.Html and rebuild

Add this class:

public class CasesNorm
{
    public string SCN { get; set; }
}

Add these methods to your controller:

private List<Autocomplete> _AutocompleteSourceCaseNumber(string query)
    {
        List<Autocomplete> sourceCaseNumbers = new List<Autocomplete>();
        try
        {
            //You will goto your Database for CasesNorm, but if will doit shorthand here

            //var results = db.CasesNorms.Where(p => p.SourceCaseNumber.Contains(query)).
            //    GroupBy(item => new { SCN = item.SourceCaseNumber }).
            //    Select(group => new { SCN = group.Key.SCN }).
            //    OrderBy(item => item.SCN).
            //    Take(10).ToList();   //take 10 is important

            CasesNorm c1 = new CasesNorm { SCN = "11111111"};
            CasesNorm c2 = new CasesNorm { SCN = "22222222"};
            IList<CasesNorm> aList = new List<CasesNorm>();
            aList.Add(c1);
            aList.Add(c2);
            var results = aList;

            foreach (var r in results)
            {
                // create objects
                Autocomplete sourceCaseNumber = new Autocomplete();

                sourceCaseNumber.Name = string.Format("{0}", r.SCN);
                sourceCaseNumber.Id = Int32.Parse(r.SCN);
                sourceCaseNumbers.Add(sourceCaseNumber);
            }
        }
        catch (EntityCommandExecutionException eceex)
        {
            if (eceex.InnerException != null)
            {
                throw eceex.InnerException;
            }
            throw;
        }
        catch
        {
            throw;
        }
        return sourceCaseNumbers;
    }

    public ActionResult AutocompleteSourceCaseNumber(string query)
    {
        return Json(_AutocompleteSourceCaseNumber(query), JsonRequestBehavior.AllowGet);
    }

credit goes to http://timdwilson.github.io/typeahead-mvc-model/



来源:https://stackoverflow.com/questions/42397148/jqueryui-autocomplete-render-html-returned-by-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!