2010-01-15 12 views
5

Abro un cuadro de diálogo jQuery, en este cuadro hago un guardar/cancelar. Para Guardar, llamo a mi controlador, hago alguna validación, guardo o tiro Exception (MyPersonalException). Si hay una excepción, devuelvo otra vista (la vista "MessageError") para mostrarla en la ventana emergente. Sólo quiero ver en el cuadro modal de mensajes disponibles en "MyPersonalException"Mensaje de excepción a UI

Mis preguntas: 1. Eso es trabajo, pero sólo con Firefox no IE no Chrome 2. ¿Hay alguna otra manera porque eso es buscar un lof de código para solo mostrar un mensaje.

La mirada controlador de la siguiente manera:

[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); 
    } 
} 

Para llamar al cuadro de diálogo, utilizo este código

jQuery (document) ready (function() {$ (function() { /* var name = $ ("# firstName"), email = $ ("# lastName"), contraseña = $ ("# isActive"), allFields = $ ([]). add (nombre) .add (correo electrónico) .add (contraseña), tips = $ ("# validateTips"); */

$("#dialog").dialog({ 
     bgiframe: true, 
     autoOpen: false, 
     modal: true, 
     buttons: { 
      Save: function() { 
       $.ajax({ 
        type: "POST", 
        url: "/Employee/SaveOrUpdate", 
        data: { 
         id: getId(), 
         firstName: getFirstName(), 
         lastName: getLastName() 
        }, 
        success: function(data) { 
         if (jqueryShowResult(data)) 
          $("#DisplayError").html(data); 
         else { 
          employeeId = 0; 
          $(this).dialog('close');        
         } 
        }, 
        error: function(XMLHttpRequest, textStatus, errorThrown) { 
        } 
       }) 

      }, 
      Cancel: function() { 
       employeeId = 0; 
       $(this).dialog('close'); 
      } 
     }, 
     close: function() { 
      $("#gridEmpoyee").trigger("reloadGrid"); 
     }, 
     open: function() { 
      $.ajax({ 
       type: "POST", 
       url: "/Employee/GetEmployee", 
       data: { 
        id: employeeId 
       }, 
       success: function(data) { 
        $("#employeeDetail").html(data); 
       }, 
       error: function(XMLHttpRequest, textStatus, errorThrown) { 
       } 
      }) 
     } 
    }); 
}); 

});

El 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

He actualizado la respuesta a continuación, esto debería permitirle hacer lo que quiera sin personalizar el objeto jQuery ajax en absoluto. –

Respuesta

2

actualización: Lo sentimos, se utiliza un envoltorio personalizado. jQuery de forma predeterminada no incluye xmlHttpRequest con éxito. A continuación hay otro enfoque, esto funciona sin cambiar su vista en absoluto. Básicamente, solo está buscando el elemento con id='code' en la respuesta, si existe, muestra el error.

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');        
    } 
}, 

Aquí está el jQuery 1.4 Version (Ver changes here, tenga en cuenta el devolución de llamada Éxito recibe objeto XHR como tercer argumento):

En primer lugar, establecer el StatusCode a 210, en su opinión context.HttpContext.Response.StatusCode = 210;, a continuación, utilizar esta llamada formato:

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

Recibo un error: "xhr undifined" –

+0

¿Entonces todavía tengo que usar el "jqueryShowResult"? ¿Está trabajando en FF, IE, Chrome? –

+0

No es necesario 'jQueryShowResult' con esta solución, debería funcionar en todos los navegadores, simplemente está buscando un elemento con' id = 'code'' estrictamente dentro del resultado ajax, eso es lo que hace el ', data' en el selector. –

Cuestiones relacionadas