2012-02-16 19 views
14

मैं सी # .NET MVC2 के साथ काम कर रहा हूं और मैं एक AJAX फ़ॉर्म बनाने की कोशिश कर रहा हूं जो एक डेटाबेस कॉल (RemoveRelation) को हटा देता है। रिकॉर्ड हटाने की प्रक्रिया इरादे के रूप में काम कर रही है। रिकॉर्ड हटा दिए जाने के बाद फ़ॉर्म को जावास्क्रिप्ट फ़ंक्शन को कॉल करना चाहिए जो दृश्यों से रिकॉर्ड को हटा देता है (निकालें (10))। यह एक एजेक्स कॉल के माध्यम से किया जाता है कि इंटरनेट एक्सप्लोरर 9 और फ़ायरफ़ॉक्स 4 पर सभी इरादे के रूप में काम कर रहे हैं, हालांकि क्रोम पर कुछ कारणों से अपडेट नहीं हो रहा है, अपडेट एक एजेक्स कॉल throuhg नहीं हो रहा है और पूरे पृष्ठ को ताज़ा कर रहा है जब रिकॉर्ड को हटाने के लिए फॉर्म है सबमिट किया गया (यह गलत है क्योंकि फॉर्म एजेक्स कार्यक्षमता के साथ उत्पन्न किया जा रहा है)।क्यों अजाक्स। बेगिनफॉर्म क्रोम में काम नहीं करता है?

<% using (Ajax.BeginForm("RemoveRelation", "Relations", 
     new AjaxOptions { OnSuccess = "function() { RemoveRelation(10); } ", InsertionMode = InsertionMode.Replace, UpdateTargetId = "Relation10" }, 
     new { id = "DeleteForm10" })) 
    { %> 

साथ ही क्रोम पर मैं एक अलग Ajax.BeginForm के साथ एक और मुद्दा है: इस कोड को जिसके साथ मैं प्रपत्र पैदा कर रहा हूँ।

<% using (Ajax.BeginForm("AddRelation", "Relations", new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "AddRelation" }, new { id = "AddRelationForm" })) 
    { %> 

उपरोक्त प्रारंभ फ़ॉर्म कोड का उपयोग सूची को हटाने के बजाय सूची में संबंध जोड़ने के लिए किया जाता है। एक बार फिर मैं तनाव देता हूं, आईई 9 और एफएफ 4 पर उपरोक्त काम कर रहा है, क्रोम पर एक जोड़ने और AJAX के माध्यम से अपडेट करने के बजाय, यह रिकॉर्ड को दो बार जोड़ रहा है और एक बार फिर AJAX अपडेट करने के बजाय पूरे पृष्ठ को रीफ्रेश कर रहा है।

यह क्रोम में क्यों टूट रहा है?

+0

आप http://jquery.malsup.com/form/ इसके बजाय – Manatherin

उत्तर

1

मैं समस्या के लिए एक अजीब समाधान पाया है है। मैं ajax प्रपत्र की एक 'एक' टैग के माध्यम से तो जैसे प्रस्तुत बुला गया था:

<A href='#' onclick="javascript:$('#ajaxform').submit();">Remove</a> 

कुछ '.submit()' एक 'एक' टैग से फोन कर कारण के लिए एक पूरा पृष्ठ ताज़ा के कारण क्रोम में खिलवाड़ किया गया था अजाक्स कॉल के बजाए। जब मैं जोड़ने के लिए जावास्क्रिप्ट इनपुट के लिए आदेश को हटाने से पहले पुष्टि करने के लिए पूछने के लिए की जरूरत

<input type='submit' value='Remove' /> 

यह समाधान भी काम किया: मैं बजाय निम्नलिखित कोड का उपयोग करके समस्या का समाधान हो। एकमात्र पकड़ यह है कि मुझे यह सुनिश्चित करने के लिए कुछ मार्कअप के आसपास स्वैप करने की आवश्यकता थी कि मेरे बटन उस फॉर्म के भीतर हो रहे थे जो वे सबमिट कर रहे थे (जो कुछ मैं समझता हूं वह सभी स्थितियों में हमेशा संभव नहीं होता है)।

+2

आप इसे रख सकते थे। आपको केवल ऑनक्लिक के अंत में झूठी वापसी की आवश्यकता है (इसलिए यह 'onclick =" जावास्क्रिप्ट: $ ('# AJAXform') होगा। सबमिट करें(); झूठी वापसी; "')। कारण यह है कि 'ए' टैग ब्राउज़र को लिंक पर नेविगेट करने का कारण बनता है (भले ही यह कहीं भी नहीं जाता) और झूठी वापसी केवल डिफ़ॉल्ट ब्राउज़र कार्रवाई होने से रोकती है। स्रोत: http://jszen.blogspot.com/2007/03/return-false-to-prevent-jumping.html – SPFiredrake

12

माइक्रोसॉफ्ट AJAX और कुछ वेबकिट ब्राउज़र के साथ एक समस्या है। मैं थोड़ी देर पहले इस मुद्दे में भाग गया, और फिक्स बहुत आसान है। एक webkit.js फ़ाइल बनाएँ और सामग्री में रखते:

Sys.Browser.WebKit = {}; //Safari 3 is considered WebKit 
if(navigator.userAgent.indexOf('WebKit/') > -1) 
{ 
    Sys.Browser.agent = Sys.Browser.WebKit; 
    Sys.Browser.version = parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]); 
    Sys.Browser.name = 'WebKit'; 
} 
फिर

या तो अपने ScriptManager भीतर या कहीं अपने पृष्ठ में (एक मास्टर पेज में अधिमानतः, मैं इसे अंत के पास जोड़ा), जोड़ने स्क्रिप्ट संदर्भ:

<Scripts> 
    <asp:ScriptReference Path="webkit.js" /> 
</Scripts> 
//OR 
<script src="webkit.js"> 

मुझे मिली मूल साइट को याद नहीं किया जा सकता है, लेकिन यह मैं this page से प्राप्त करने में सक्षम था। सौभाग्य!

+0

बकवास का उपयोग करने पर विचार करना चाहेंगे, मैंने सोचा कि यह काम करता है लेकिन अब मुझे पता चला है कि यह नहीं हुआ है, यह अभी भी पूर्ण पृष्ठ रीफ्रेश कर रहा है। –

+0

देखें कि क्या आपको कंसोल में कोई XmlHttpRequest त्रुटियां मिल रही हैं या नहीं। क्रोम कंसोल फ़ायरबग की तरह है, लेकिन यह बनाया गया है और (आईएमओ) का उपयोग करना आसान है। इस तरह मैंने मूल रूप से इस मुद्दे की खोज की, क्योंकि यह .NET AJAX जेएस फ़ाइलों में से एक में विफल रहा था (फ़ाइल की शुरुआत में ठीक है)। – SPFiredrake

+0

मुझे उस मामले के लिए कोई XmlHttpRequest त्रुटि या कोई त्रुटि या चेतावनी नहीं मिल रही है। –

1

आप अपने प्रोजेक्ट MVC 3 के भीतर, asp.net MVC 3 उपयोग करने के लिए अद्यतन कर सकते हैं, jQuery ajax डिफ़ॉल्ट

+0

जैसा कि मैं इस चरण में एमवीसी को परियोजना में अद्यतन करना चाहता हूं, असंभव है। यह एक कार्य प्रोजेक्ट है और ढांचे में कुछ भी बदलना मतलब है कि हर रूप में फिर से परीक्षण करना होगा और उनमें से बहुत सारे हैं। मेरे मालिक एक और महीने के परीक्षण करने के लिए बिल्कुल खुश नहीं होंगे। –

संबंधित मुद्दे