2017-02-16 82 views
15

我已经阅读了同样的问题很多帖子,但没有帮助,所以道歉的重复问题:(伊夫其次是硬编码值,并自动完成的作品上jQueryUI的网站上简单的示例,但我需要它来从我的数据库JQuery用户界面自动完成未达到的ActionResult C#MVC

景观:

@Html.TextBoxFor(model => model.Position, new { @type = "text", @id = "jobtitle", @name = "jobtitle", @placeholder = "Job Title" }) 

JS:

编辑:我添加成功一个警报,该警报被调用,但有不是dat一个(即。没有数据被从DB拉)

<script> 
$(function() { 
      $("#jobtitle").autocomplete({ 
       source: function (request, response) { 
        $.ajax({ 
         url: '@Url.Action("JobsAutoFill", "Account")', 
         data: { 
          Prefix: request.term 
         }, 
         success: function (data) { 
          alert(data); 
          response(data); 
         } 
        }); 
       }, 
       minLength: 1 
      }); 

      //$("#jobtitle").autocomplete({ 
      // source: "/Account/JobsAutoFill/" 
      //}); 
     }); 
</script> 

而且我已经添加所需的链接:

<script src="https://code.jquery.com/jquery-1.12.4.js"></script> 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 

下面是我的ActionResult(实际上是一个JsonResult)&功能拉作业列表:

public List<Jobs> GetAllJobs() 
    { 
     List<Jobs> JobsList = new List<Jobs>(); 

     using (RBotEntities EF = new RBotEntities()) 
     { 
      var JobsListQuery = (from ED in EF.EmploymentDetails 
            select new 
            { 
             ED.pkiEmploymentDetailID, 
             ED.Position 
            }); 

      foreach (var item in JobsListQuery) 
      { 
       JobsList.Add(new Jobs 
       { 
        Id = item.pkiEmploymentDetailID, 
        Name = item.Position 
       }); 
      } 
     } 

     return JobsList; 
    } 

public JsonResult JobsAutoFill(string Prefix) 
     { 
      //Note : you can bind same list from database 


      List<Jobs> ObjList = new List<Jobs>(); 

      ObjList = GetAllJobs(); 

      //Searching records from list using LINQ query 


      var JobNames = (from N in ObjList 
          where N.Name.StartsWith(Prefix) 
          select new { N.Name }); 
      return Json(JobNames, JsonRequestBehavior.AllowGet); 
     } 

我错过了什么或做错了什么?

我感谢任何帮助,谢谢!

+0

任何人都可以帮忙吗? – AxleWack

+1

现在忽略jquery。这是一个GET方法。尝试从Web浏览器访问它。它工作吗?作业是否可序列化?您可以在服务器上找到断点吗?另外,“数据”对象内部是什么?也尝试data.Data –

+0

香港专业教育学院之所以能达到现在控制器和看到乔布斯返回,但现在它不显示(我只看到小盒子弹出一个不包含文本)。我试过data.Data,它说未定义。 – AxleWack

回答

13

我明白了!

导致问题的第一件事是我需要在ActionResult上面添加[AllowAnonymous]。

其次,我改变了我的Ajax调用此:

$(function() { 
    $("#jobtitle").autocomplete({ 
     source: function (request, response) { 
      $.ajax({ 
       url: '@Url.Action("JobsAutoFill", "Account")', 
       data: { 
        Prefix: request.term 
       }, 
       success: function (data) { 
        response($.map(data, function (obj) { 
         return { 
          label: obj.Name, 
          value: obj.Name 
         }; 
        })); 
       } 
      }); 
     }, 
     minLength: 1 
    }); 
}); 

下面是我的ActionResult。我添加了一个变化,将挑选出的大小写:

[AllowAnonymous] 
public JsonResult JobsAutoFill(string Prefix) 
{ 
    //Note : you can bind same list from database 


    List<Jobs> ObjList = new List<Jobs>(); 

    ObjList = GetAllJobs(); 

    //Searching records from list using LINQ query 


    var JobNames = (from N in ObjList 
        where N.Name.ToLower().StartsWith(Prefix.ToLower()) 
        select new { N.Name }); 
    return Json(JobNames, JsonRequestBehavior.AllowGet); 
} 
3

你不应该让它使用AllowAnonymous,如果它不必须是具有公共访问。 其次改变你的查询获得更好的性能:

var JobNames = (from N in ObjList 
       where N.Name.ToLower().StartsWith(Prefix.ToLower()) 
       select N.Name); 

显然,你需要返回一个字符串数组。但是你的代码正在返回一个具有单个字符串属性的对象数组。

,改变你的脚本代码acccording到更新:

success: function (data) { 
        response($.map(data, function (obj) { 
         return { 
          label: obj, 
          value: obj 
         }; 
        })); 
       } 
3

不要更改允许匿名改变你的Ajax调用一样,通过你的参数的查询字符串,这将打击你的后端功能。希望这会帮助你

$(function() { 
$("#jobtitle").autocomplete({ 
    source: function (request, response) { 
     $.ajax({ 
      url: '@Url.Action("JobsAutoFill", "Account")?Prefix='+$("#jobtitle").val(), 
      data: { 
       Prefix: request.term 
      }, 
      success: function (data) { 
       response($.map(data, function (obj) { 
        return { 
         label: obj.Name, 
         value: obj.Name 
        }; 
       })); 
      } 
     }); 
    }, 
    minLength: 1 
}); 

});

相关问题