2010-01-15 49 views
5

Bir jQuery iletişim kutusu açtım, bu kutuda bir kaydetme/iptal yapıyorum. Kaydetmek için, denetleyicimi çağırabilir, bazı onaylamalar yapabilir, Özel Durum'u (MyPersonalException) kaydedebilir veya atabilirim. Özel durum varsa, açılır pencerede görüntülemek için başka bir Görünüm ("MessageError" görünümü) döndürürüm. Bunun lof bakmak çünkü bir başka yolu var mı ama sadece Firefox ile iştir 1. değil IE değil 2. Chrome: Sadece kalıcı kutusunda "MyPersonalException"UI'ye özel durum iletisi

Sorularım mevcut mesajı görmek istiyorum Sadece bir mesaja dalmak için kod. Böyle

kontrolör görünüm:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult SaveOrUpdate(Guid id, string firstName, string LastName) 
{ 
    try 
    { 
     Employee employee = new Employee() { Id = id, FirstName = firstName, LastName = LastName }; 
     _employeeService.SaveOrUpdate(employee); 
     return Index(); 
    } 
    catch (MyPersonalException ex) 
    { 
     _model.ErrorMessage = ex.Message; 
     return View("MessageError", _model); 

    } 
    catch (Exception ex) 
    { 
     _model.ErrorMessage = ex.Message; 
     return View("MessageError", _model); 
    } 
} 

iletişim kutusunu çağırmak için, bu kodu

jQuery (document) .ready (function() { $ (function() { kullanmak/* var name = $ ("# firstName"), email = $ ("# lastName"), password = $ ("# isActive"), allFields = $ ([]). add (name) .add (e-posta) .add (parola), ipuçları = $ ("# validateTips"); */

});

jQueryShowResult

<script type="text/javascript"> 
    jqueryShowResult = function(msg) { 
     var browser; 
     try //Internet Explorer 
        { 
      xmlDocTest = new ActiveXObject("Microsoft.XMLDOM"); 
      browser = "IE"; 
     } 
     catch (e) { 
      browser = "FF"; 
     } 

     if (browser == "IE") { 
      try { 
       xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
       xmlDoc.async = "false"; 
       xmlDoc.loadXML(msg); 
       var message = xmlDoc.getElementsByTagName("message")[0].childNodes[0].nodeValue; 
       var code = xmlDoc.getElementsByTagName("code")[0].childNodes[0].nodeValue; 

       return false; 
      } 
      catch (e) { 
       return true; 
      } 
     } 
     else { 

      var code = $(msg).find('code').text(); 
      var message = $(msg).find('message').text(); 
      if (code == "500") { 
       return false; 
      } 
      else { 
       return true; 
      } 
     } 
    }; 
</script> 
+0

Aşağıdaki cevabı güncelledim, bu jQuery ajax nesnesini özelleştirmeden istediğiniz şeyi yapmanıza izin vermeli. –

cevap

2

Güncelleme: Maalesef özel sarmalayıcı kullanın. jQuery varsayılan olarak xmlHttpRequest'i başarıda içermez. Aşağıda başka bir yaklaşım var, bu bakış açınızı değiştirmeden çalışır. Varsa, yalnızca cevabı id='code' ile kontrol ediyorsanız, varsa, hatayı görüntüleyiniz. İlk olarak, bu geri arama kullanmak, sonra görünümünde context.HttpContext.Response.StatusCode = 210; yılında 210'a statusCode set

:

success: function(data, textStatus) { 
    if ($("#code",data).length) { //See if the element <whatever id='code'> exists 
    $("#DisplayError").html(data); 
    } else { 
    employeeId = 0; 
    $(this).dialog('close');        
    } 
}, 

İşte jQuery 1.4 Sürüm var (not changes here Bkz Başarı geri arama üçüncü argüman olarak XHR nesneyi alır) format:

success: function(data, textStatus, xhr) { 
    if (xhr.status == 210) { 
    $("#DisplayError").html(data); 
    } else { 
    employeeId = 0; 
    $(this).dialog('close');        
    } 
}, 
+0

Bir hata alıyorum: "xhr undifined" –

+0

O zaman hala "jqueryShowResult" kullanmak zorundayım? FF, IE, Chrome üzerinde çalışıyor mu? –

+0

Bu çözüm ile 'jQueryShowResult' için gerek yok, tüm tarayıcılarda çalışmalı, sadece ajax sonucu içinde' id = 'code'' ile bir eleman arıyoruz,' seçici. –