2017-02-16 16 views
15

तक पहुंच नहीं रहा है, मैंने एक ही समस्या के साथ कई पोस्ट पढ़ी हैं, लेकिन कोई भी मदद नहीं है, इसलिए डुप्लिकेट प्रश्न के लिए क्षमा चाहते हैं :(मैंने JQueryUI साइट पर हार्ड कोडिंग मानों और स्वत: पूर्ण कार्यों द्वारा सरल नमूना का पालन किया , लेकिन मैं इसे की जरूरत है मेरी डाटाबेस से आने के लिएJQuery UI Autocomplete ActionResult C# MVC

दृश्य:।

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

जे एस:

संपादित: मैं सफलता पर एक चेतावनी जोड़ा, और चेतावनी बुलाया जा रहा है, लेकिन कोई बात नहीं है एक (अर्थात। कोई डेटा डीबी से खींचा जा रहा है)

<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 विधि है। इसे किसी वेब ब्राउज़र से एक्सेस करने का प्रयास करें। क्या यह काम करता है? नौकरियां serializable है? क्या आप सर्वर पर एक ब्रेकपॉइंट मारा सकता है? इसके अलावा, "डेटा" ऑब्जेक्ट के अंदर क्या है? डेटा भी आज़माएं। डेटा –

+0

मैं अब नियंत्रक तक पहुंचने में सक्षम हूं और देखता हूं कि जॉब्स वापस आ गए हैं, लेकिन अब यह नहीं दिखाता है (मुझे केवल इसमें कोई टेक्स्ट नहीं है)। मैंने डेटा की कोशिश की। डेटा और यह अनिर्धारित कहा। – AxleWack

उत्तर

13

मुझे यह काम मिल गया!

पहली बात यह है कि कोई समस्या पैदा कर रही थी कि मुझे अपने ActionResult के ऊपर [AllowAnonymous] जोड़ने की आवश्यकता थी।

दूसरे, मैं इस के लिए मेरे अजाक्स कॉल बदल दिया है:

$(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 
}); 

});