2012-11-30 30 views
29

केंडो यूआई का उपयोग करते हुए अनुरोध मैं एक ग्रिड वापस नियंत्रक में डेटा के लिए अजाक्स कॉल करता है कि:केंडो: अजाक्स डाटा में त्रुटियों से निपटने <strong>MVC4</strong> में

public ActionResult SearchUser_Read([DataSourceRequest]DataSourceRequest request) 
    { 
     var data = CreateAnExcaptionHere(); 
     return Json(data.ToDataSourceResult(request)); 
    } 

मैं का उपयोग कैसे करूँ यह कॉल पृष्ठ को सूचित करने के लिए कि एक त्रुटि हुई थी?

उत्तर

36

आप सर्वर से एक त्रुटि संदेश प्रदर्शित करने के लिए की जरूरत है, तो आप केवल अपने त्रुटियाँ संपत्ति सेट के साथ एक DataSourceResult वस्तु वापस लौट कर यह कर सकते हैं इस का उपयोग करते हुए (.Events(events => events.Error("onError")) लाइन द्वारा संदर्भित):

function onError(e, status) { 
    if (e.status == "customerror") { 
     alert(e.errors); 
    } 
    else { 
     alert("Generic server error."); 
    } 
} 
+8

मैं सुझाव है कि आप ModelState 'पकड़ (अपवाद exc) { ModelState.AddModelError (स्ट्रिंग का उपयोग करना।खाली, exc.Message); रिटर्न जेसन (नया उपयोगकर्ता मॉडल [0]। टोडाटा स्रोत संसाधन (अनुरोध, मॉडलस्टेट)); } ' इस मामले में आप अपडेट एक्शन सत्यापन के लिए एक ही त्रुटि हैंडलर का उपयोग करने और \ Read क्रियाओं को हटाने में सक्षम होंगे। (क्योंकि सत्यापन के दौरान त्रुटियां सरणी [] [] हैं और एक स्ट्रिंग नहीं हैं) – Sergey

+3

यदि आप मॉडलस्टेट का उपयोग @ सेर्गेई के रूप में करते हैं तो सुझाव दिया गया है कि आपको 'e.errors [" "] का उपयोग करना होगा। 'एररर (ई, स्टेटस) में त्रुटियों' त्रुटि मानों तक पहुंचने के लिए विधि। E.errors ऑब्जेक्ट में स्ट्रिंग वह है जो आपने 'ModelState.AddModelError'' को जो भी महत्वपूर्ण मूल्य प्रदान किया है। फिर आप सभी त्रुटियों को लूप कर सकते हैं और प्रदर्शित कर सकते हैं: 'var त्रुटियाँ = e.errors [" "] त्रुटियां; var त्रुटि संदेश; (var i = 0; i iambdot

+1

@ ड्रू डेलानो। मैं "DataSourceResult" में "त्रुटियों" नामक कोई भी संपत्ति नहीं ढूंढ पा रहा हूं। कृपया सलाह दें। –

2

अपवाद उठाने का प्रयास करें और जांचें कि यह एक चेतावनी संदेश संकेत दे रहा है या नहीं।

केंडो ग्रिड के लिए, त्रुटि घटना है जो आपके लिए उपयोगी हो सकती है।

http://docs.kendoui.com/documentation/getting-started/using-kendo-with/aspnet-mvc/migration/widgets/grid

हम Telerik MVC ग्रिड जो स्वचालित रूप से चेतावनी संदेश प्रदर्शित अगर कोई त्रुटि बाध्यकारी है इस्तेमाल किया।

http://www.telerik.com/community/forums/aspnet-mvc/grid/exception-handling.aspx

http://www.telerik.com/community/forums/aspnet-mvc/grid/how-to-do-error-handling-in-gridaction-methods.aspx

+1

दुर्भाग्य से, केंडो ग्रिड में अपवाद संभाल नहीं करता है:

यह समारोह भी किसी भी ग्रिड उस डेटा स्रोत है कि एक त्रुटि फेंक दिया उपयोग कर रहे हैं में परिवर्तन रद्द ऐसा लगता है कि अजाक्स के माध्यम से डेटा तक पहुंचने पर नियंत्रक ऐसा लगता है। मैं सोच रहा हूं कि कोई संदेश है कि हम वापस भेज सकते हैं, हालांकि यह –

+0

पर उठा सकता है यदि आप JQuery AJAX अनुरोधों का उपयोग करके ग्रिड को मैन्युअल रूप से बाध्य कर रहे हैं, तो नियंत्रक के "अपवाद" विधि से त्रुटि संदेश भेजने का प्रयास करें। – Sunny

+0

अंतिम दो लिंक केवल प्रीमियम-पहुंच हैं। – Bardicer

24

यह पाया जाता है, केंडो सिर्फ डेटा स्रोत के लिए एक घटना कॉल करने के लिए जे एस समारोह जोड़कर समर्थन करता है। बस।

return this.Json(new DataSourceResult 
      { 
       Errors = "my custom error" 
      }); 

और से ग्राहक पर यह लेने:

.DataSource(dataSource => dataSource 
     .Ajax() 
     .Events(events => events.Error("onError")) 
     .Read(read => read.Action("SearchUser_Read", "Search").Data("parentModel")) 
) 

<script> 
    function onError(e, status) { 
      alert("A server error has occurred!"); 
} 
</script> 
+0

क्या यहां कुछ याद आ रही है? पहला बिट वैध जेएस की तरह नहीं दिखता है और पूंजीकरण जेएस के लिए भी गलत है। –

+3

नहीं, शीर्ष भाग रेजर प्रारूप का उपयोग कर मानक केंडो है। यह सब समझ और काम करता है। – Rethic

+1

आपको अभी भी नियंत्रक से त्रुटि डेटा को ग्रिड में पास करने के लिए एक तंत्र की आवश्यकता है, इसलिए दुर्भाग्य से इसके लिए और भी कुछ है। – Suncat2000

9

ड्रयू का जवाब सिर्फ एक छोटा सा विस्तार करने के लिए: हम आम तौर पर भी w में रोल बैक करना केंडो ग्रिड में परिवर्तन चाहते हैं मुर्गी एक त्रुटि होती है। अन्यथा, यदि किसी त्रुटि को ग्रिड से हटा दिया गया है, उदाहरण के लिए, त्रुटि को फेंकने के बावजूद यह अभी भी हटा दिया जाएगा और एक संदेश दिखाया गया था।

function onError(e, status) { 

    // Cancel changes on any grids on the page that are using this data source 
    $('.k-grid').each(function (item) { 
     var grid = $(this).data("kendoGrid"); 
     if (e.sender === grid.dataSource) { 
      grid.cancelChanges(); 
     } 
    }); 

    if (e.status == "customerror") { 
     alert(e.errors); 
    } 
    else { 
     alert("Generic server error."); 
    } 

} 
+0

उसी नस में, विशिष्ट केंडो ग्रिड प्राप्त करने के लिए जो डेटासोर्स को पढ़ता है, उदा। जिसे सॉर्ट किया गया था, आप '$ (e.sender.options.table.context) .डेटा (" केंडोग्रिड ") का उपयोग कर सकते हैं। – Rhumborl

+0

@Rhumborl my e.sender.options.table शून्य है। कोई विचार क्यों हो सकता है? –

-1

कैसे के बारे में

throw new HttpResponseException(HttpStatusCode.BadRequest);