AJAX

2015-05-08 9 views
8

द्वारा एएसपी.नेट एमवीसी सी # में एक्शन विधि को कॉल करने के लिए jQuery मैंने इस काम को पाने के लिए घंटों तक प्रयास किया है, और मैं वास्तव में उम्मीद करता हूं कि आप में से एक इस बारे में अधिक जानता है (बहुत कुछ का एक बिल्ली)। जब क्लाइंट कुंजी टेक्स्टबॉक्स में ऊपर है, मैं अपडेटऑर्डर() नामक एमवीसी सी # नियंत्रक विधि को कॉल करना चाहता हूं। आदर्श रूप से, मैं फॉर्मकोलेक्शन के साथ फॉर्म तत्वों तक पहुंच बनाना चाहता हूं (फ़ॉर्म को "createOrder" कहा जाता है)।AJAX

नियंत्रक में, मेरे पास है:

सी #

[WebMethod] 
public static void updateOrder(){ 
    string s = "asdf"; 
} 

ऊपर स्ट्रिंग घोषणा breakpointed है। ध्यान में रखते हुए, मैं एक विधि मैं मूल रूप से कॉपी किया है और चिपकाया है कि मैं stackoverflow पर पाया:

जावास्क्रिप्ट

function updateOrderJS() { 
    var $form = $('form[id="createOrder"]'); 
    $.ajax({type : "POST", 
     url  : $form.attr('action'), 
     data : $form.serialize(), 
     error : function(xhr, status, error) {}, 
     success : function(response) { 
      updateOrder(); 
     } 
    }); 
    return false; 
} 

घटना बस है:

जावास्क्रिप्ट

updateOrderJS(); 

updateOrderJS() विधि आग (एक चेतावनी के साथ चेक), लेकिन ब्रेकपॉइंट नहीं करता है।

+0

क्या आप $ form.attr ('action') में प्राप्त होने वाले मान को डीबग और देख सकते हैं? –

+0

अपने AJAX कॉल में "टाइप" से "विधि" बदलें उदा। विधि: इसके बजाय "POST": "टाइप:" पोस्ट " –

+0

प्रकार सही है। – garryp

उत्तर

19

Asp.Net MVC में, आपको WebMethod के साथ अपनी विधि को सजाने की आवश्यकता नहीं है। आप बस एक एक्शन बनाएं (जो एक विधि है) और इसके परिणामस्वरूप वापसी करें। नमूने के लिए:

public class CustomerController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult UpdateOrder() 
    { 
     // some code 
     return Json(new { success = true, message = "Order updated successfully" }, JsonRequestBehavior.AllowGet); 
    } 
} 

और अपने View में आप इस तरह एक जावास्क्रिप्ट की कोशिश कर सकते ($.ajax jQuery विधि का उपयोग कर - टिप्पणी देखें):

$.ajax({ 
    url: '@Url.Action("UpdateOrder")', // to get the right path to controller from TableRoutes of Asp.Net MVC 
    dataType: "json", //to work with json format 
    type: "POST", //to do a post request 
    contentType: 'application/json; charset=utf-8', //define a contentType of your request 
    cache: false, //avoid caching results 
    data: {}, // here you can pass arguments to your request if you need 
    success: function (data) { 
     // data is your result from controller 
     if (data.success) { 
      alert(data.message); 
     } 
    }, 
    error: function (xhr) { 
     alert('error'); 
    } 
}); 
+1

फ़ेलिप, आपका कमाल। मुझे यकीन है कि अन्य उत्तरों सही हो सकते हैं, और मैंने आपका चयन किया क्योंकि यह बहुत अधिक प्लग और प्ले था (इसलिए लिखने के लिए)। अब मैं सर्वर-साइड कोड जोड़ना शुरू कर सकता हूं। धन्यवाद – user4855057

3

एमवीसी में, आपको [WebMethod] सामान की आवश्यकता नहीं है - आप केवल एक नियमित नियंत्रक कार्रवाई ActionMethod लौट सकते हैं (या शून्य अगर आपको वापसी मूल्य की आवश्यकता नहीं है)। WebMethod स्थैतिक विधियों के साथ विशेषता वेबफॉर्म के लिए है, एमवीसी नहीं।

public ActionMethod updateOrder(MyModel someModel) { 
    // Do something 
    return null; 
} 

जावास्क्रिप्ट में आपका यूआरएल है कि कार्रवाई करने के लिए यूआरएल, जो आप @Url.Action("updateOrder", "Orders"), जहां "आदेश" अपने नियंत्रक का नाम है का उपयोग कर उस्तरा में करने के लिए प्राप्त कर सकते हैं होगा।

0
  1. सुनिश्चित करें "Url" है प्रारूप में पेज.aspx/updateOrder

  2. निर्दिष्ट datatype: json

  3. अपने updateOrderJS() बुलाया जा रहा है सुनिश्चित करें।

  4. सुनिश्चित करें contentType: "application/json; charset=utf-8" शामिल है।

नोट: [WebMethod] webforms तरीकों बुला, नहीं MVC के लिए प्रयोग किया जाता है।

+0

अनाम डाउनवोट क्यों? – garryp

+0

मैं वह नहीं हूं जिसने आपको कम किया है। लेकिन मुझे नहीं लगता कि एमवीसी यूआरएल में आम तौर पर 'page.aspx शामिल है 'डेटाटाइप और कंटेंट टाइप मॉडल बाइंडर काम करता है या नहीं, लेकिन मुझे यकीन नहीं है कि यह प्रभावित होगा कि मार्ग बिल्कुल कहलाता है या नहीं। और पूछने वाले ने पहले ही अपने प्रश्न में कहा था कि उसने सत्यापित किया है कि अपडेटऑर्डर जेएस() को बुलाया जा रहा था –

+0

WebMethodAttribute का उपयोग वेब रूपों में किया जाता है, जैसा कि स्थैतिक तरीके हैं, इसलिए मुझे यहां भ्रम है। मैंने इसे समझाने के लिए नीचे एक नोट भी जोड़ा। – garryp

0

ऐसा लगता है कि आप अपने <form> टैग की action विशेषता में एमवीसी मार्ग का यूआरएल डाल रहे हैं।मैं नहीं देख सकता कि यह विशेषता कैसा दिखता है क्योंकि आपने अपना एचटीएमएल पोस्ट नहीं किया है, लेकिन जो मैं देख सकता हूं उससे उस विशेषता का मूल्य गलत हो सकता है।

अधिकांश समय, एक विशिष्ट एमवीसी क्रिया का यूआरएल http://ServerDomain/Path(IfAny)/ControllerName/ActionName है। उदाहरण के लिए, यदि आप एक नियंत्रक और इस तरह कार्रवाई ...

public class StackController 
{ 
    [HttpPost] 
    public ActionResult Overflow() 
    { 
     return View(); 
    } 
} 

... और अपने ASP.NET अनुप्रयोग है अपने <form> टैग की action विशेषता में, www.example.com के लिए तैनात किया जाता है यूआरएल http://www.example.com/Stack/Overflow होगा।

बेशक, इन यूआरएल को बदलने के लिए आपके एएसपी.नेट एमवीसी में अन्य सेटिंग्स के लिए संभव है, जैसे कि आपके ग्लोबल.एएसएक्स की RegisterRoutes विधि में रूट सेटअप, या शायद यदि आपके नियंत्रक क्षेत्र में विभाजित हैं। यदि आपके <form> का URL सही दिखता है, तो कृपया अपने एएसपी.NET ऐप में किसी भी प्रासंगिक नियंत्रक रूटिंग कोड के साथ एचटीएमएल पोस्ट करें।

यदि आपका फॉर्म रेजर व्यू (cshtml फ़ाइल) के अंदर है, तो आप सही फॉर्म यूआरएल उत्पन्न करने के लिए <form action="@Url.Action({ controller = "ControllerName", action = "ActionName" })" method="post"> का उपयोग कर सकते हैं।