2011-02-12 28 views
12

का उपयोग कर नियंत्रक को पैरामीटर पास करें मैंने एक दृश्य और नियंत्रक बनाया है, नियंत्रक मैं कुछ खोज परिणामों को वापस लौटना चाहता हूं। मैं का उपयोग कर नियंत्रक बोल रहा हूँ jQueryjquery AJAX

<input type="text" id="caption" /> 
     <a href="#" id="search">Search</a> 
     <script> 
      $("#search").click(function() { 
       alert('called'); 
       var p = { Data: $('#search').val() }; 
       $.ajax({ 
        url: '/Ingredients/Search', 
        type: "POST", 
        data: JSON.stringify(p), 
        dataType: "json", 
        contentType: "application/json; charset=utf-8", 
        success: function (data) { 
         alert(data); 
        }, 
        error: function() { 
         alert("error"); 
        } 
       }); 
      }); 

मेरे नियंत्रक इस

[HttpPost] 
    public ActionResult Search(string input) 
    { 
     var result = _db.Ingredients.Where(i => i.IngredientName == input); 

     return new JsonResult() {Data = new {name="Hello There"}}; 
    } 

मेरे समस्या मुझे यकीन है कि कैसे नियंत्रक में मेरी jQuery कॉल से varible पाने के लिए नहीं कर रहा हूँ की तरह लग रहा है, मैं एक डाल दिया है नियंत्रक पर ब्रेकपॉइंट और इसकी हिट हालांकि इनपुट स्ट्रिंग हमेशा शून्य है।

मैंने क्या गलत किया है?

उत्तर

19
<input type="text" id="caption" /> 
@Html.ActionLink("Search", "Search", "Ingredients", null, new { id = "search" }) 

और फिर भैया AJAXify एक अलग JavaScript फ़ाइल में इस लिंक:

$(function() { 
    $("#search").click(function() { 
     $.ajax({ 
      url: this.href, 
      type: 'POST', 
      data: { input: $('#caption').val() }, 
      success: function (result) { 
       alert(result.name); 
      }, 
      error: function() { 
       alert("error"); 
      } 
     }); 
     return false; 
    }); 
}); 

जहां अपने नियंत्रक कार्रवाई ऐसा दिखाई दे सकता:

[HttpPost] 
public ActionResult Search(string input) 
{ 
    var result = _db.Ingredients.Where(i => i.IngredientName == input); 
    // TODO: Use the result variable in the anonymous object 
    // that is sent as JSON to the client 
    return Json(new { name = "Hello There" }); 
} 
+1

सही। व्याख्या करने के लिए: यदि सी # में आपका चर और JSON तत्व में उपयोग किया गया फ़ील्ड आपके पास एक ही नाम है, तो वे स्वचालित रूप से एक-दूसरे से बंधे रहेंगे। तो यदि आप JSON प्रॉपर्टी को '{captionvalue: $ ('# caption') में बदल देंगे। Val()} ', आपको अपने फ़ंक्शन में वैरिएबल का नाम बदलकर' कैप्शनवल्यू 'करना होगा। बस कुछ स्पष्टीकरण ताकि आप समझ सकें कि यह क्यों काम करता है :-) – Flater

0

डिफ़ॉल्ट मॉडेलबिन्डर को काम करने के लिए समस्या यह है कि इसे नाम से पैरामीटर से मिलान करने की आवश्यकता है। आप अपने डिफ़ॉल्ट पैरामीटर में "आईडी" के नाम पर अपने क्रिया पैरामीटर का नाम बदल सकते हैं, जो डिफ़ॉल्ट रूप से "आईडी" है, फिर यह करें;

 $("#search").click(function() { 
      alert('called'); 
      var url = '/Ingredients/Search/' + $('#search').val(); 
      $.ajax({ 
       url: url, 
       type: "POST", 
       dataType: "json", 
       contentType: "application/json; charset=utf-8", 
       success: function (data) { 
        alert(data); 
       }, 
       error: function() { 
        alert("error"); 
       } 
      }); 
     }); 

या, आप जेसन स्ट्रिंग को स्वयं इसे इस तरह से बनाने के लिए लिख सकते हैं जो सर्वर की ओर से मेल खाएगा;

 $("#search").click(function() { 
      alert('called'); 
      var p = { "input": $('#search').val() }; 
      $.ajax({ 
       url: '/Ingredients/Search', 
       type: "POST", 
       data: p, 
       dataType: "json", 
       contentType: "application/json; charset=utf-8", 
       success: function (data) { 
        alert(data); 
       }, 
       error: function() { 
        alert("error"); 
       } 
      }); 
     }); 

यह अनचाहे है लेकिन काम करना चाहिए।

+0

हाय डेविड, का प्रयोग मैंने कोशिश की है कि हालांकि किसी भी भाग्य के बिना। मैंने नियंत्रकों पैरामीटर को अपडेट किया है, हालांकि इसे अभी भी शून्य के रूप में वापस किया जा सकता है। कोई अन्य सलाह? –

+0

क्षमा करें बस एहसास हुआ कि मैं कैप्शन टेक्स्ट बॉक्स के बजाय खोज हाइपरलिंक से मूल्य का उपयोग कर रहा था। तो लाइन $ ("खोज") को बदलने का प्रयास करें। वैल() $ ("कैप्शन") के साथ। वैल() – davidferguson

+0

कूल धन्यवाद डेविड –

2

रास्ता यहाँ है।

आप

डेटाप्रकार निर्दिष्ट चाहते हैं: 'json'

तो उपयोग करते हैं,

$('#ddlIssueType').change(function() { 


      var dataResponse = { itemTypeId: $('#ddlItemType').val(), transactionType: this.value }; 

      $.ajax({ 
       type: 'POST', 
       url: '@Url.Action("StoreLocationList", "../InventoryDailyTransaction")', 
       data: { 'itemTypeId': $('#ddlItemType').val(), 'transactionType': this.value }, 
       dataType: 'json', 
       cache: false, 
       success: function (data) { 
        $('#ddlStoreLocation').get(0).options.length = 0; 
        $('#ddlStoreLocation').get(0).options[0] = new Option('--Select--', ''); 

        $.map(data, function (item) { 
         $('#ddlStoreLocation').get(0).options[$('#ddlStoreLocation').get(0).options.length] = new Option(item.Display, item.Value); 
        }); 
       }, 
       error: function() { 
        alert("Connection Failed. Please Try Again"); 
       } 
      }); 

आप

डेटाप्रकार निर्दिष्ट नहीं करते हैं: 'json '

फिर

$('#ddlItemType').change(function() { 

     $.ajax({ 
      type: 'POST', 
      url: '@Url.Action("IssueTypeList", "SalesDept")', 
      data: { itemTypeId: this.value }, 
      cache: false, 
      success: function (data) { 
       $('#ddlIssueType').get(0).options.length = 0; 
       $('#ddlIssueType').get(0).options[0] = new Option('--Select--', ''); 

       $.map(data, function (item) { 
        $('#ddlIssueType').get(0).options[$('#ddlIssueType').get(0).options.length] = new Option(item.Display, item.Value); 
       }); 
      }, 
      error: function() { 
       alert("Connection Failed. Please Try Again"); 
      } 
     }); 

का उपयोग आप

डेटाप्रकार निर्दिष्ट चाहते हैं: 'json' और contentType: 'आवेदन/json; charset = utf-8 '

फिर

$.ajax({ 
      type: 'POST', 
      url: '@Url.Action("LoadAvailableSerialForItem", "../InventoryDailyTransaction")', 
      data: "{'itemCode':'" + itemCode + "','storeLocation':'" + storeLocation + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: 'json', 
      cache: false, 
      success: function (data) { 

       $('#ddlAvailAbleItemSerials').get(0).options.length = 0; 
       $('#ddlAvailAbleItemSerials').get(0).options[0] = new Option('--Select--', ''); 

       $.map(data, function (item) { 
        $('#ddlAvailAbleItemSerials').get(0).options[$('#ddlAvailAbleItemSerials').get(0).options.length] = new Option(item.Display, item.Value); 
       }); 
      }, 
      error: function() { 
       alert("Connection Failed. Please Try Again."); 
      } 
     });