2012-06-22 28 views
6

अंतिम संपादन:MVC3 Ajax.BeginForm onSuccess फ़ायरफ़ॉक्स में नहीं चलता है

बाद डैरिन दिमित्रोव से जवाब के बाद, मैं ने पाया है कि समस्या यह है कि नियंत्रक विधि UpdateForm() लिए AJAX फोन था समाप्त हो गया एक खाली स्ट्रिंग लौट रहा है। यह एक संशोधन था जिसे मुझे एक अलग समस्या का सामना करने के बाद कुछ समय पहले जरूरी पाया गया था। एक खाली स्ट्रिंग पास करने से फ़ायरफ़ॉक्स के पार्सर को चकित कर दिया गया था (जबकि क्रोम और आईई की परवाह नहीं थी, जाहिर है) इसलिए मैंने रिक्त स्ट्रिंग को खाली div के साथ बदल दिया।

संपादित करें:

नीचे डैरिन दिमित्रोव के सुझावों के लिए धन्यवाद, मैं ने पाया है कि कारण मैं परेशानी हो रही किया गया था एक त्रुटि के कारण फेंके जब भी प्रश्न से संबंधित फ़ॉर्म प्रस्तुत किया जा रहा है।

JQuery Error

त्रुटि पढ़ता "नोड पदानुक्रम में निर्दिष्ट बिंदु पर नहीं डाला जा सकता है।" फॉर्म जमा होने पर हर बार इसे फेंक दिया जाता है। मैंने पोस्ट डेटा में देखा है कि ऐसा लगता है कि यह एक XMLHttpRequest है। क्या यह कारण है (प्रश्न में AJAX अनुरोध सिर्फ HTML लौटा रहा है)? यहाँ Firebug से पोस्ट डेटा है:

POST Data 1

POST Data 2

POST Data 3

यह त्रुटि लिखा है "XML पार्सिंग त्रुटि - कोई तत्व नहीं मिला"।

FYI करें - एचटीएमएल लौटाए जाने हमेशा एक खाली स्ट्रिंग है ...


मैं एक MVC3 आवेदन IIS7 पर चल रहा है।

<form action="/RootName/ControllerName/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="ClearTextBox" data-ajax-update="#TargetDiv" id="form0" method="post"> 
    <textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>  
    <input id="send" class="button" type="submit" value="Send"><br> 
</form> 

क्या मैं मूल रूप से कर रहा हूँ:

@using (Ajax.BeginForm("UpdateForm", new AjaxOptions { UpdateTargetId = "TargetDiv", InsertionMode = InsertionMode.InsertAfter, OnSuccess = "ClearTextBox" })) 
{ 
    @Html.TextArea("txtInput", new { id = "txtInput", cols = "20", rows = "5", wrap = "virtual" }) 
    <input id="send" class="button" type="submit" value="Send"/><br /> 
} 

यह निम्न HTML जब नियंत्रक इस दृश्य प्रदान करता है उत्पन्न करता है: मेरे विचार से एक में, मैं एक रूप एक Microsoft HTML सहायक समारोह का उपयोग कर बनाया जा रहा है यहां यही प्रयास TextArea बुलाया txtInput के अंदर का पाठ लेने के लिए और Div के अंत TargetDiv बुलाया से संलग्न है जब भी ऊपर Send बटनसे और स्पष्ट क्लिक किया जाता है पाठ बाहर संलग्न करने के बादClearTextBox() विधि (जावास्क्रिप्ट) के माध्यम से पूरा हो गया है। परिशिष्ट हमेशा हर ब्राउज़र में काम करता है; और जब मैं इंटरनेट एक्सप्लोरर या क्रोम में चलाता हूं, तो टेक्स्ट का समाशोधन ठीक काम करता है। हालांकि, फ़ायरफ़ॉक्स ClearTextBox() विधि को कॉल नहीं करना चाहता है।

फ़ायरफ़ॉक्स इस हस्ताक्षर में data-ajax-success विकल्प के साथ संगत नहीं है?


चीजें मैं

की कोशिश की है मैं इस आदमी को मिला:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 

मैं इस स्क्रिप्ट बोल रहा हूँ: Ajax.BeginForm doesn't call onSuccess

समाधान इस स्क्रिप्ट को जोड़ने के लिए है :

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 

... लेकिन मैंने इसे मामले में स्वैप करने का प्रयास किया। कोई आनंद नहीं है।

मैं विधि कॉल सी # चैट रुम में कुछ लोगों द्वारा कोष्ठक शामिल करने के लिए परिवर्तित करने का प्रयास करने के लिए कहा गया था ताकि एचटीएमएल इस तरह बाहर आ गया:

<form action="/WebChat/TMWC/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="ClearTextBox()" data-ajax-update="#chatText" id="form0" method="post"> 
    <textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>  
    <input id="send" class="button" type="submit" value="Send"><br> 
</form> 

लेकिन वह मदद नहीं की।

सी # चैट में लोगों ने यह भी सुझाव मैं एक चेतावनी के साथ जावास्क्रिप्ट कॉल की जगह - कुछ इस तरह:

<form action="/WebChat/TMWC/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="alert('yo!')" data-ajax-update="#chatText" id="form0" method="post"> 
    <textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>  
    <input id="send" class="button" type="submit" value="Send"><br> 
</form> 

क्रोम संदेश बॉक्स पॉप जबकि, फायरफॉक्स नहीं करता है!

+0

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

+0

मैं फ़ायरबग का उपयोग कर रहा हूं लेकिन इसने मुझे कुछ भी इंगित नहीं किया है ... = ( –

+0

क्या आप 'ClearTextBox()' विधि पोस्ट कर सकते हैं? बस इसे आजमाएं (फ़ाइल-> नई एमवीसी 3 प्रोजेक्ट, जिसका उपयोग 'jquery.unobtrusive-AJAX .min.js'), और एफएफ में ठीक काम करता है। ClearTextBox का मेरा संस्करण यह है: 'फ़ंक्शन ClearTextBox() {$ ("# txtInput")। वैल ("");} ' –

उत्तर

1

स्थिति नव निर्मित एएसपी.नेट एमवीसी 3 अनुप्रयोग में कोई रेपो नहीं है।

नियंत्रक:

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

    [HttpPost] 
    public ActionResult UpdateForm() 
    { 
     return Content(DateTime.Now.ToLongTimeString()); 
    } 
} 

देखें (~/Views/Home/Index.cshtml):

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    function ClearTextBox() { 
     $('textarea').val(''); 
    } 
</script> 

<form action="/Home/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="ClearTextBox" data-ajax-update="#TargetDiv" id="form0" method="post"> 
    <textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>  
    <input id="send" class="button" type="submit" value="Send"><br> 
</form> 

<div id="TargetDiv"></div> 

वर्क्स क्रोम, एफएफ और IE में बिल्कुल ठीक।

साथ ही आप यह भी सुनिश्चित करना चाहते हैं कि सामग्री-प्रकार प्रतिक्रिया HTTP शीर्षलेख आपके द्वारा भेजी गई वास्तविक प्रतिक्रिया से मेल खाता हो। उदाहरण के लिए मैंने देखा है कि बहुत से लोग प्रतिक्रिया शरीर में कुछ अमान्य JSON के साथ application/json प्रतिक्रिया शीर्षलेख भेजते हैं जो अधिक संवेदनशील पार्सर्स को चकित करने के लिए उत्पन्न करता है।

+0

आपकी सभी मदद के लिए धन्यवाद! (भविष्य पाठक: प्रश्न में मेरे संपादन देखें) –