2012-09-26 12 views
6

है तो मैं "ऑनफेलर" को कॉल करना चाहता हूं जब मॉडलस्टेट नियंत्रक में मान्य नहीं है।अजाक्स। बेजिनफॉर्म ऑनफेलर जब मॉडलस्टेट इनवालिड

मेरे LoginView में

@using (Ajax.BeginForm("Login", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "Login",InsertionMode = InsertionMode.Replace, OnSuccess = "Success", OnFailure = "onError" })) 
{ 

} 

नियंत्रक में

[httpPost] 
public ViewResult Login(LoginModel model) 
{ 
    if (ModelState.IsValid) 
    { 

    } 
    else 
    { 
    ModelState.AddModelError("login is fail") 
    } 
    return View("Login",model) 
} 

तो मैं चाहता हूँ फोन onSuccess विधि यदि ModelState वैध है और अगर यह असफल तो प्रदर्शन के साथ ही OnError विधि सभी त्रुटि जो मॉडल में हैं फोन राज्य।

+0

सफलता समारोह में आप क्या करते हैं? क्या आप रीडायरेक्ट करते हैं? जो मैं समझता हूं उससे आप सत्यापन संदेशों में विफल होने पर त्रुटि संदेशों को प्रदर्शित करना चाहते हैं => आप लॉगऑन फॉर्म वाले आंशिक दृश्य को वापस करना चाहते हैं और फिर अपने DOM से संबंधित भाग को रीफ्रेश करना चाहते हैं। लेकिन सफलता के मामले के बारे में क्या? आप इस मामले में ग्राहक को वापस क्या करना चाहते हैं? एक दृश्य? –

+0

मुझे फिर से चलाने के लिए डारिन धन्यवाद, मैं सफलता में रीडायरेक्ट करना चाहता हूं लेकिन विफलता में मैं केवल त्रुटि संदेश के साथ ऑनफेलर को कॉल करना चाहता हूं। वर्तमान में एप्लिकेशन में यह सिक्योर विधि पर कॉल करता है, यहां तक ​​कि मॉडलस्टेट मान्य नहीं है – Shivkumar

उत्तर

19

यहाँ आप क्या कर सकते हैं:

[HttpPost] 
public ActionResult Login(LoginModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // everything went fine and we want to redirect in this case => 
     // we pass the url we want to redirect to as a JSON object: 
     return Json(new { redirectTo = Url.Action("SomeController", "SomeAction") }); 
    } 
    else 
    { 
     // there was an error => add an error message 
     ModelState.AddModelError("login is fail") 
    } 

    // return a partial view instead of a full vire 
    return PartialView("Login",model) 
} 

और फिर आप सभी की जरूरत सफलता समारोह है:

@using (Ajax.BeginForm("Login", new AjaxOptions { HttpMethod = "POST", OnSuccess = "loginAjaxSuccess" })) 
{ 

} 

जिसमें आप परीक्षण कर सकते हैं जिस स्थिति में आप कर रहे हैं:

function loginAjaxSuccess(result) { 
    if (result.redirectTo) { 
     // the controller action returned a JSON result => it was a successful login 
     // => we redirect the browser to this url 
     window.location.href = result.redirectTo; 
    } else { 
     // the action returned a partial view with the form containing the errors 
     // => we need to update the DOM: 
     $('#Login').html(result); 
    } 
} 

वैसे भी अगर आप त्रुटि के मामले में अविभाज्य क्लाइंट साइड सत्यापन का उपयोग कर रहे हैं जहां आप रीफ्रेश कर रहे हैं

} else { 
    // the action returned a partial view with the form containing the errors 
    // => we need to update the DOM 
    $('#Login').html(result); 

    // Now that the DOM is updated let's refresh the unobtrusive validation rules on the form: 
    $('form').removeData('validator'); 
    $('form').removeData('unobtrusiveValidation'); 
    $.validator.unobtrusive.parse('form'); 
} 
+0

ड्रिन जब मैं व्यूरेसल्ट का उपयोग करता हूं तो यह मुझे जेसन का उपयोग करने की अनुमति नहीं देता है और ViewResult PartailView – Shivkumar

+0

वापस नहीं लौटा सकता है, आपको 'ActionResult' का उपयोग करना चाहिए, मेरा अद्यतन उत्तर देखें। –

+0

धन्यवाद डारिन यह वास्तव में उपयोगी है – Shivkumar

6

जब आप ModelState में समस्या का पता लगाने, सेट:, फार्म आप मैन्युअल रूप से नए सत्यापन नियमों की पार्स के लिए मजबूर करने की आवश्यकता होगी अन्यथा अगली बार जब आप फ़ॉर्म सबमिट करने का प्रयास करते हैं, ग्राहक सत्यापन काम नहीं करेगा 400 की तरह प्रतिक्रिया ऑब्जेक्ट की स्थिति कोड (आप System.Net.HttpStatusCode क्लास से कोड प्राप्त कर सकते हैं)

इससे ऑनफेलर विधि को आग लग जाएगी।

सी

+0

यह हमारे परीक्षण वातावरण पर काम नहीं करता है लेकिन मेरी देव मशीन पर काम करता है। परीक्षण पर, 400 लौटने पर ऑनफेलर विधि नहीं आती है। कोई सुराग? – Jeff

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