2013-04-24 4 views
76

में नियंत्रक को एक सरल अजाक्स कॉल बनाना मैं एएसपी.नेट एमवीसी अजाक्स कॉल के साथ शुरू करने की कोशिश कर रहा हूं।एएसपीनेट एमवीसी

नियंत्रक:

public class AjaxTestController : Controller 
{ 
    // 
    // GET: /AjaxTest/ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult FirstAjax() 
    { 
     return Json("chamara", JsonRequestBehavior.AllowGet); 
    } 
} 

दृश्य:

<head runat="server"> 
    <title>FirstAjax</title> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      var serviceURL = '/AjaxTest/FirstAjax'; 

      $.ajax({ 
       type: "POST", 
       url: serviceURL, 
       data: param = "", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: successFunc, 
       error: errorFunc 
      }); 

      function successFunc(data, status) {  
       alert(data); 
      } 

      function errorFunc() { 
       alert('error'); 
      } 
     }); 
    </script> 
</head> 

मैं सिर्फ डेटा लौटने नियंत्रक विधि के साथ एक चेतावनी मुद्रित करने के लिए की जरूरत है। कोड के ऊपर बस मेरे दृश्य पर "chamara" प्रिंट करें। एक चेतावनी फायरिंग नहीं है।

अद्यतन

मैं नीचे के रूप में मेरी नियंत्रक संशोधित और यह काम शुरू। मेरे पास कोई स्पष्ट विचार नहीं है कि यह अब क्यों काम कर रहा है। कृपया कोई समझाओ। पैरामीटर "एक" से संबंधित नहीं है मैं इसे जोड़ा क्योंकि मैं एक ही विधि का नाम के साथ दो तरीकों को नहीं जोड़ सकते और parameters.I लगता है कि इस समस्या का समाधान नहीं हो सकता है, लेकिन इसके काम कर

public class AjaxTestController : Controller 
    { 
     // 
     // GET: /AjaxTest/ 
     [HttpGet] 
     public ActionResult FirstAjax() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult FirstAjax(string a) 
     { 
      return Json("chamara", JsonRequestBehavior.AllowGet); 
     } 
    } 
+0

वापसी जेसन स्वरूपित स्ट्रिंग '{" नाम ":" chamara "}'। फिर 'डेटा [' नाम '] ' – Rab

+1

के रूप में पढ़ने की कोशिश करें दृश्य से दूसरी jQuery लाइब्रेरी निकालें। आपका कोड इस तरह काम करना चाहिए। मुझे लगता है कि एक स्क्रिप्ट त्रुटि हो रही है और चेतावनी को दिखने से रोक रही है। – Terence

उत्तर

17

अद्यतन किया है के बाद,

  1. अपनी पहली के साथ डिफ़ॉल्ट HttpGet अनुरोध और renders FirstAjax कार्रवाई बुला खाली एचटीएमएल दृश्य। (इससे पहले कि आप इसे नहीं कर रहे थे)
  2. बाद में उस दृश्य के डोम तत्वों को लोड करने पर आपके अजाक्स कॉल को निकाल दिया गया और अलर्ट प्रदर्शित किया गया।

इससे पहले कि आप किसी भी HTML को प्रस्तुत किए बिना ब्राउज़र में JSON लौट रहे थे। अब इसमें एक HTML व्यू प्रस्तुत किया गया है जहां यह आपका JSON डेटा प्राप्त कर सकता है।

आप JSON को अपने सादे डेटा को सीधे HTML नहीं प्रस्तुत नहीं कर सकते हैं।

39

डेटा विशेषता निकालें के रूप में आप कर रहे हैं POSTING सर्वर पर कुछ भी नहीं (आपका नियंत्रक किसी भी पैरामीटर की अपेक्षा नहीं करता है)।

और आपके AJAX विधि में आप Razor का उपयोग करें और एक स्थिर स्ट्रिंग के बजाय @Url.Action उपयोग कर सकते हैं:

$.ajax({ 
    url: '@Url.Action("FirstAjax", "AjaxTest")', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: successFunc, 
    error: errorFunc 
}); 

अपने अद्यतन से:

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("FirstAjax", "AjaxTest")', 
    contentType: "application/json; charset=utf-8", 
    data: { a: "testing" }, 
    dataType: "json", 
    success: function() { alert('Success'); }, 
    error: errorFunc 
}); 
+2

@chamara - क्षमा करें, HttpPost को हटाएं (आप सर्वर पर कुछ भी पोस्ट नहीं कर रहे हैं, इसलिए यह एक अनावश्यक विशेषता होगी) और नियंत्रक को हिट नहीं किया जाएगा। जैसा कि मैंने आपको बोया है, AJAX फ़ंक्शन में "टाइप: POST" को भी हटा दें। –

0
बजाय

url: serviceURL, उपयोग

url: '<%= serviceURL%>', 

और क्या आप हैं सफलता के लिए 2 पैरामीटर गुजरना Func?

function successFunc(data) 
{ 
    alert(data); 
} 
+0

समाधान काम नहीं किया – chamara

0

जोड़ें "JsonValueProviderFactory" Global.asax में:

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    ValueProviderFactories.Factories.Add(new JsonValueProviderFactory()); 
} 
4

यह आपके अद्यतन प्रश्न के लिए है।

के बाद से आप एक ही नाम और हस्ताक्षर के साथ दो विधियां नहीं हो सकतीं आप ActionName विशेषता का उपयोग करने के लिए है:

अद्यतन:

[HttpGet] 
public ActionResult FirstAjax() 
{ 
    Some Code--Some Code---Some Code 
    return View(); 
} 

[HttpPost] 
[ActionName("FirstAjax")] 
public ActionResult FirstAjaxPost() 
{ 
    Some Code--Some Code---Some Code 
    return View(); 
} 

और कैसे एक विधि हो जाता है की आगे के संदर्भ के लिए this लिंक देखें एक कार्यवाही। हालांकि बहुत अच्छा संदर्भ है।

2

पहली बात एक ही पृष्ठ पर jQuery लाइब्रेरी के दो विभिन्न संस्करणों होने के कोई जरूरत नहीं है, या तो "1.9.1" या "2.0.0" ajax कॉल काम करने के लिए पर्याप्त है ..

यहाँ अपने है नियंत्रक कोड:

public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult FirstAjax(string a) 
    { 
     return Json("chamara", JsonRequestBehavior.AllowGet); 
    } 

इससे आपका दृश्य की तरह दिखना चाहिए कैसे:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 

<script type="text/javascript"> 
$(document).ready(function() { 
    var a = "Test"; 
    $.ajax({ 
     url: "../../Home/FirstAjax", 
     type: "GET", 
     data: { a : a }, 
     success: function (response) { 
      alert(response); 
     }, 
     error: function (response) { 
      alert(response); 
     } 
    }); 
}); 
</script> 
7

गतिशील इस तरह से अपनी कार्रवाई को फोन करके अपने URL बदलने के लिए एक रेजर का उपयोग करें:

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("ActionName", "ControllerName")', 
    contentType: "application/json; charset=utf-8", 
    data: { data: "yourdata" }, 
    dataType: "json", 
    success: function(recData) { alert('Success'); }, 
    error: function() { alert('A error'); } 
}); 
+0

Url.Action के पैरामीटर इस उत्तर में पीछे की ओर हैं, यह url.Action (actionName, नियंत्रकनाम) –

+0

धन्यवाद :) मैंने इसे बदल दिया है। – gdmanandamohon

+0

इसका कोई प्रशंसक नहीं है, यह दृश्य और जावास्क्रिप्ट के युग्मन को प्रोत्साहित करता है, लेकिन ओह, उपयोगकर्ता नाम जांचता है? – Halter

0

देखें;

$.ajax({ 
     type: 'GET', 
     cache: false, 
     url: '/Login/Method', 
     dataType: 'json', 
     data: { }, 
     error: function() { 
     }, 
     success: function (result) { 
      alert("success") 
     } 
    }); 

नियंत्रक विधि;

public JsonResult Method() 
{ 
    return Json(new JsonResult() 
     { 
     Data = "Result" 
     }, JsonRequestBehavior.AllowGet); 
} 
1

तुम सिर्फ पर हिट करने के लिए सी # विधि अपने अजाक्स कॉल में की जरूरत है तुम सिर्फ अगर आपके अनुरोध तो मिल तुम सिर्फ केवल यूआरएल निर्दिष्ट करने की आवश्यकता है दो बात प्रकार और यूआरएल पारित करने के लिए की जरूरत है। कृपया ठीक काम कर रहे कोड का पालन करें।

C# Code 
    [HttpGet] 
    public ActionResult FirstAjax() 
    { 
     return Json("chamara", JsonRequestBehavior.AllowGet); 
    } 


Java Script Code if Get Request 
    $.ajax({ 
     url: 'home/FirstAjax', 
     success: function(responce){ alert(responce.data)}, 
     error: function(responce){ alert(responce.data)} 
    }); 



Java Script Code if Post Request and also [HttpGet] to [HttpPost] 
     $.ajax({ 
      url: 'home/FirstAjax', 
      type:'POST', 
      success: function(responce){ alert(responce)}, 
      error: function(responce){ alert(responce)} 
     }); 

नोट: यदि आप एक ही नियंत्रक में FirstAjax जिसमें अपने दृश्य नियंत्रक उसके बाद URL में नियंत्रक नाम की कोई आवश्यकता नहीं। जैसे url: 'FirstAjax',