MVC5jQuery UI自动完成文本框,获取关于值选择的其他项目详细信息

MVC5jQuery UI自动完成文本框,获取关于值选择的其他项目详细信息,jquery,asp.net-mvc,jquery-ui,autocomplete,jquery-ui-autocomplete,Jquery,Asp.net Mvc,Jquery Ui,Autocomplete,Jquery Ui Autocomplete,问题: 在文本框(ASP.NET MVC 5 Razor环境)中, 当用户选择一个值时,表单上的其他字段应自动填充 下面是自动完成的实现。(到目前为止还有效) 只得到错误: 未定义,//json未定义 500内部服务器错误//json 如前所述,自动完成功能正在运行,我正在寻找详细信息(其他表单控件-文本框),以便在自动完成文本框中选择值时自动填充。答案: a工作执行: <link rel="stylesheet" href="@Url.Content("//code.jquery.com

问题:
在文本框(ASP.NET MVC 5 Razor环境)中, 当用户选择一个值时,表单上的其他字段应自动填充

下面是自动完成的实现。(到目前为止还有效)

只得到错误:

  • 未定义,//json未定义
  • 500内部服务器错误//json

  • 如前所述,自动完成功能正在运行,我正在寻找详细信息(其他表单控件-文本框),以便在自动完成文本框中选择值时自动填充。

    答案:

    a工作执行:

    <link rel="stylesheet" href="@Url.Content("//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css")">   
    <script src="@Url.Content("//code.jquery.com/jquery-1.10.2.js")"></script>
    <script src="@Url.Content("//code.jquery.com/ui/1.11.4/jquery-ui.js")"></script>
    
    <script type="text/javascript">
    $(function () {
    $("#ItemCode").autocomplete({
            source: function (request, response) {
                var itemnamecodes = new Array();
                $.ajax({
                    async: false, cache: false,
                    //type: "POST",
                    url: "@(Url.Action("GetItemCode", "Home"))",
                    data: { "term": request.term },
                    success: function (data) {
                        for (var i = 0; i < data.length ; i++) {
                            itemnamecodes[i] = { label: data[i].Value, Id: data[i].Key };
                        }
                     }
                });
                response(itemnamecodes);
            },
             select: function (event, ui) {                 
                 $.ajax({
                     cache: false, async: false, type: "POST",
                     url: "@(Url.Action("GetItemDetails", "Home"))",
                     data: { "id": ui.item.Id },                    
                    success: function (data) {                       
                        var item = data[0];                          
                        $("#ItemName").val(item.ItemName);
                        $("#ItemModel").val(item.ItemModel);                       
                        ... the other details you need 
                        action = data.Action;
                    },
                    error: function (xhr, ajaxOptions, thrownError) {
                        alert('Failed to retrieve Item.');
                    }
                });
            }
    });      
    });
    </script>
    
    @using (Html.BeginForm())
    {
     ...
      @Html.EditorFor(model => model.ItemCode, ...
      @Html.EditorFor(model => model.ItemName, ...
      ... other form elements to show details
    
    还有一件很讨厌的事。。现在解决方案:


    您需要将带有特定属性的viewmodel作为json结果传递给视图,以便在视图中处理

    a工作执行:

    <link rel="stylesheet" href="@Url.Content("//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css")">   
    <script src="@Url.Content("//code.jquery.com/jquery-1.10.2.js")"></script>
    <script src="@Url.Content("//code.jquery.com/ui/1.11.4/jquery-ui.js")"></script>
    
    <script type="text/javascript">
    $(function () {
    $("#ItemCode").autocomplete({
            source: function (request, response) {
                var itemnamecodes = new Array();
                $.ajax({
                    async: false, cache: false,
                    //type: "POST",
                    url: "@(Url.Action("GetItemCode", "Home"))",
                    data: { "term": request.term },
                    success: function (data) {
                        for (var i = 0; i < data.length ; i++) {
                            itemnamecodes[i] = { label: data[i].Value, Id: data[i].Key };
                        }
                     }
                });
                response(itemnamecodes);
            },
             select: function (event, ui) {                 
                 $.ajax({
                     cache: false, async: false, type: "POST",
                     url: "@(Url.Action("GetItemDetails", "Home"))",
                     data: { "id": ui.item.Id },                    
                    success: function (data) {                       
                        var item = data[0];                          
                        $("#ItemName").val(item.ItemName);
                        $("#ItemModel").val(item.ItemModel);                       
                        ... the other details you need 
                        action = data.Action;
                    },
                    error: function (xhr, ajaxOptions, thrownError) {
                        alert('Failed to retrieve Item.');
                    }
                });
            }
    });      
    });
    </script>
    
    @using (Html.BeginForm())
    {
     ...
      @Html.EditorFor(model => model.ItemCode, ...
      @Html.EditorFor(model => model.ItemName, ...
      ... other form elements to show details
    
    还有一件很讨厌的事。。现在解决方案:


    您需要将带有特定属性的viewmodel作为json结果传递给View,以便在View中处理,这就是我所做的,希望对您有所帮助


    Css



    幸亏 控制器

        [HttpPost]
        public JsonResult AutoComplete(string prefix)
        {
            var customers = _CustomerRepo.getCustomerDetails(prefix);
            return Json(customers);
        }
    

    JS


    我就是这样做的,希望有帮助


    Css



    幸亏 控制器

        [HttpPost]
        public JsonResult AutoComplete(string prefix)
        {
            var customers = _CustomerRepo.getCustomerDetails(prefix);
            return Json(customers);
        }
    

    JS


    $(“#ItemName”).val(data.ItemName)我正在进行问答,答案已准备就绪。。只需少量编辑,谢谢。。项目/数据。。这是个打字错误。。基本上,需要在返回的json数据中处理数组。。请稍等,我会完整地回答您的问题,因为它不是一个博客网站。你的问题甚至没有说明问题是什么。你答案中的代码没有回答问题,因为没有问题要回答。好的,我已经重写了它,它现在适合吗?它仍然不是问题!不,在其中的任何位置,您都不能指明什么不起作用,或者控制器方法是什么,或者它返回的数据是什么,或者html是什么。
    $(“#ItemName”).val(data.ItemName)我正在进行问答,答案已准备就绪。。只需少量编辑,谢谢。。项目/数据。。这是个打字错误。。基本上,需要在返回的json数据中处理数组。。请稍等,我会完整地回答您的问题,因为它不是一个博客网站。你的问题甚至没有说明问题是什么。你答案中的代码没有回答问题,因为没有问题要回答。好的,我已经重写了它,它现在适合吗?它仍然不是问题!无论在哪里,您都不会指出什么不起作用,或者控制器方法是什么,或者它返回什么数据,或者html是什么。
    
    var item = data[0];
    
    enter code here.isloading1 {   
    background-color: #ffffff;
    background-image: url("http://loadinggif.com/images/image-selection/3.gif");
    background-size: 16px 16px;
    background-position:right center;
    background-repeat: no-repeat;
    }
    
        [HttpPost]
        public JsonResult AutoComplete(string prefix)
        {
            var customers = _CustomerRepo.getCustomerDetails(prefix);
            return Json(customers);
        }
    
    $(function () {
    $("#Customer_Name").autocomplete({
        source: function (request, response) {
            $.ajax({
                url: '/Controller/AutoComplete/',
                data: "{ 'prefix': '" + request.term + "'}",
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    response($.map(data, function (item) {
    
    
                        return {
                            //value is the default list value in auto compleate drop down
                            value: item.CustomerName,
                            id: item.CustomerID,
                            CustomerAddress: item.CustomerAddress,
                            CustomerCity: item.CustomerCity,
                            CustomerPostcode: item.CustomerPostcode
    
                        };
    
                    }));
                },
                error: function (response) {
                    alert(response.responseText);
                },
                failure: function (response) {
                    alert(response.responseText);
                }
            });
        },
    
        select: function (e, i) {
            //TestCode
            // alert("CustomerName - " + i.item.value + " PostCode - " + i.item.CustomerPostcode + " CustomerCity - " + i.item.CustomerCity + " CustomerAddress - " + i.item.CustomerAddress);
    
            //set value for hiden field
            $("#pickup_addressline2").val(i.item.CustomerAddress);
            $("#CustomerCity").val(i.item.CustomerCity);
            $("#CustomerID").val(i.item.ID);
            $("#CustomerPostcode").val(i.item.CustomerPostcode);
        },
        minLength: 1,
        /* Show spinner while loading data #2 */
        search: function () {
            $("#Customer_Name").addClass("isloading1");
        },
        response: function () {
            $("#Customer_Name").removeClass("isloading1");
        }
    
    
    });
    });